c++ - 获取错误 87,SetupDiGetDeviceInterfaceDetail 的参数不正确

标签 c++ winusb setupapi

我在调用 SetupDiGetDeviceInterfaceDetail ( https://msdn.microsoft.com/en-us/library/ff551120.aspx ) 时一直收到 Windows 错误 87,即使我将所有可选参数都切换为 NULL,我仍然收到错误,但我在另一个有效的函数中使用了前两个参数,所以我不明白他们有什么不对的地方。

HDEVINFO hdiInfo = SetupDiGetClassDevsW(&guid, NULL, NULL, 0x12);

SP_DEVICE_INTERFACE_DATA hidDevIData = SP_DEVICE_INTERFACE_DATA();


hidDevIData.cbSize = sizeof(hidDevIData);
bool isValid = SetupDiEnumDeviceInterfaces(hdiInfo, 0, &guid, i, &hidDevIData);

if (isValid)
{
    DWORD dwLength;
    PSP_DEVICE_INTERFACE_DETAIL_DATA hidDevIDetailData = PSP_DEVICE_INTERFACE_DETAIL_DATA();
    hidDevIData.cbSize = 8;
    hidDevIDetailData = new SP_DEVICE_INTERFACE_DETAIL_DATA();
    hidDevIDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);

    SetupDiGetDeviceInterfaceDetail(hdiInfo, &hidDevIData, NULL, 0, &dwLength, NULL); //ERROR 87 : ERROR_INVALID_PARAMETER
}

我真的不知道哪个参数可能不正确,因为所有前面的函数都返回 true(例如 GUID 是有效的)。

最佳答案

对于那些遇到同样问题的人,您只需将 cbSize 设置为 sizeof(object):

hidDevIData.cbSize = sizeof(hidDevIData);
hidDevIDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);

关于c++ - 获取错误 87,SetupDiGetDeviceInterfaceDetail 的参数不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44071399/

相关文章:

windows - 多种架构,winusb 和 wix

javascript "header"文件存储一些数据

c++ - 如何检查对象是否在数组中?

windows - WDK8 - winusb.h 在哪里?

c++ - 缺少 WinUSB 模板

c# - 如何在给定设备路径的情况下获取 USB_DEVICE_DESCRIPTOR

c++ - 如何在 Windows 中查找所有连接的可移动 USB 存储设备?

c++ - 窗口 : detect same device on both bluetooth api and setupapi

c++ - 检查/修改迭代器 "constness"

c++ - Vulkan 中的描述符集计数歧义