gpt4 book ai didi

c++ - DeviceIoControl GetLastError 87 (ERROR_INVALID_PARAMETER)

转载 作者:行者123 更新时间:2023-11-27 23:52:17 39 4
gpt4 key购买 nike

此代码在 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();

但在 Windows 10 上运行时出现错误 87 ( ERROR_INVALID_PARAMETER )。可能是什么原因?

最佳答案

MFT_ENUM_DATA 这实际上是 typedef 扩展为 MFT_ENUM_DATA_V0MFT_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 .

并且您没有初始化必须设置为 2 或 3 的 MaxMajorVersion

因此您需要或添加行 med.MaxMajorVersion = 2;(或 3)。或使用 MFT_ENUM_DATA_V0 med={};

关于c++ - DeviceIoControl GetLastError 87 (ERROR_INVALID_PARAMETER),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45426742/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com