我试图枚举MFT以获取文件名列表。
此代码在Win32项目中使用时起作用:
MFT_ENUM_DATA med;
med.StartFileReferenceNumber = 0;
med.LowUsn = 0;
med.HighUsn = ujd.NextUsn;
BYTE pData[sizeof(DWORDLONG) + 0x10000];
DWORD cb;
while (DeviceIoControl(handleToVolume, FSCTL_ENUM_USN_DATA, &med, sizeof(med),
pData, sizeof(pData), &cb, NULL) != FALSE) {
//do the processing
}
但是当我在C ++ / CLI中使用相同的代码时,DeviceIoControl
给出false,GetLastError
给出ERROR_INVALID_FUNCTION。
当相同的代码被翻译成C#时,它就可以工作。
知道发生了什么事吗?
答案 0 :(得分:0)
检查你是否有这个定义:
;
并将#define FSCTL_ENUM_USN_DATA
CTL_CODE(FILE_DEVICE_FILE_SYSTEM,44,METHOD_NEITHER,FILE_READ_DATA)
替换为FILE_READ_DATA