原帖由 olly 于 2009-9-28 22:31 发表
为什么我的调用会出错
typedef BYTE * (* FSREAD)(LARGE_INTEGER base,DWORD size) ;
typedef bool (* FSWRITE)(LARGE_INTEGER base,DWORD size,BYTE * mem) ;
typedef bool ( * FS_PRE_READ)(FSREAD ...
以下是我写的VC下调用例子,试了下,可以使用
hDev = CreateFile("[url=]\\\\.\\c[/url]:",
GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
if (hDev == INVALID_HANDLE_VALUE){MessageBox(0,"","打开磁盘失败",0);return msg.wParam;}else{MessageBox(0,"","打开磁盘成功",0);;}
HINSTANCE DLLInst = NULL;
FS_ENUMFILE FileEnum;
FS_PRE_READ FileRreRead;
if(NULL == DLLInst) DLLInst = LoadLibrary(_T("FS.dll"));
if (DLLInst) {
FileEnum = (FS_ENUMFILE) ::GetProcAddress(DLLInst, "FS_ENUMFILE");
FileRreRead = (FS_PRE_READ) ::GetProcAddress(DLLInst, "FS_PRE_READ");
}
FileRreRead(FileEnumPre);
void * node = NULL;
node=FileEnum(L"c:\\", node); //FileEnum的值需要返回给node,参数中的node是上次得到的文件清单,用来删除链表的,不需要删除的话可以传入空,你可以先用L"c:\\windows"这样试下行不行
FS_FAT * fp=(FS_FAT *)node;//这里不一定是FS_FAT类型的,NTFS加入后则是FS_NTFS(目前未提供)类型的,需要自己根据文件系统判断什么类型
while(fp!=NULL)
{
MessageBox(0,fp->shortname,"",0);
fp=fp->next;
}
MessageBox(0,"","结束",0);;
/// |