首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DeviceIoControl GetLastError 87 (ERROR_INVALID_PARAMETER)

DeviceIoControl GetLastError 87 (ERROR_INVALID_PARAMETER)
EN

Stack Overflow用户
提问于 2017-07-31 23:26:49
回答 1查看 4.3K关注 0票数 0

当在Windows 7上启动时,这段代码是非常好的:

代码语言:javascript
运行
复制
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 (参数在Windows10上运行它。可能是什么原因?)

EN

Stack Overflow用户

回答已采纳

发布于 2017-07-31 23:42:55

MFT_ENUM_DATA --这实际上是typedef,它从NTDDI_VERSION扩展到MFT_ENUM_DATA_V0MFT_ENUM_DATA_V1

代码语言:javascript
运行
复制
#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={};

票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45426742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档