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

Другие вопросы по тегам