DeviceIoControl работает в C++ и C#, но возвращает ERROR_INVALID_FUNCTION при вызове в C++/CLI
Я пытаюсь перечислить 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
дает ложное и GetLastError
дает ERROR_INVALID_FUNCTION. Когда тот же код переведен на C#, он работает.
Есть идеи, что происходит?
1 ответ
Проверьте, есть ли у вас это определение:
#define FSCTL_ENUM_USN_DATA
CTL_CODE(FILE_DEVICE_FILE_SYSTEM,44,METHOD_NEITHER,FILE_READ_DATA)
и заменить FILE_READ_DATA
с FILE_ANY_ACCESS