DeviceIoControl在C ++和C#中工作,但在C ++ / CLI中调用时返回ERROR_INVALID_FUNCTION

时间:2013-06-29 01:59:09

标签: c++-cli deviceiocontrol

我试图枚举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#时,它就可以工作。

知道发生了什么事吗?

1 个答案:

答案 0 :(得分:0)

检查你是否有这个定义:

;

并将#define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,44,METHOD_NEITHER,FILE_READ_DATA) 替换为FILE_READ_DATA