DeviceIoControl GetLastError 87 (ERROR_INVALID_PARAMETER)

Этот код прекрасно работает при запуске в Windows 7:

HANDLE hVol = CreateFile(L"\\\\.\\c:", GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
// hVol is always successful (both of Win7 and 10), I double-checked
BYTE pData[sizeof(DWORDLONG) + 0x10000];
DWORD cb;
MFT_ENUM_DATA med;
med.StartFileReferenceNumber = 0;
med.LowUsn = 0;
med.HighUsn = MAXLONGLONG;
DeviceIoControl(hVol, FSCTL_ENUM_USN_DATA, &med, sizeof(med), pData, sizeof(pData), &cb, NULL);
err = GetLastError();

но я получаю ошибку 87 (ERROR_INVALID_PARAMETER) при запуске его в Windows 10. Что может быть причиной?

0

Решение

MFT_ENUM_DATA это действительно typedef который расширился до MFT_ENUM_DATA_V0 или же MFT_ENUM_DATA_V1 зависеть от NTDDI_VERSION :

#if (NTDDI_VERSION >= NTDDI_WIN8)
typedef MFT_ENUM_DATA_V1 MFT_ENUM_DATA, *PMFT_ENUM_DATA;
#else
typedef MFT_ENUM_DATA_V0 MFT_ENUM_DATA, *PMFT_ENUM_DATA;
#endif

очевидно, в вашем случае NTDDI_VERSION >= NTDDI_WIN8 и вы используете MFT_ENUM_DATA_V1.

а ты не инициализируй MaxMajorVersion который должен быть установлен на 2 или 3.

так что вам нужно или добавить строку med.MaxMajorVersion = 2; (или 3). или использовать MFT_ENUM_DATA_V0 med={};

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector