我有一个使用 SetupAPI 在 Windows XP 上枚举 USB 设备的代码:
HDEVINFO hDevInfo = SetupDiGetClassDevs( &_DEVINTERFACE_USB_DEVICE, 0, 0, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
for (DWORD i = 0; ; ++i)
{
SP_DEVINFO_DATA devInfo;
devInfo.cbSize = sizeof(SP_DEVINFO_DATA);
BOOL succ = SetupDiEnumDeviceInfo(hDevInfo, i, &devInfo);
if (GetLastError() == ERROR_NO_MORE_ITEMS)
break;
if (!succ) continue;
DWORD devClassPropRequiredSize = 0;
succ = SetupDiGetDeviceRegistryProperty(hDevInfo, &devInfo, SPDRP_COMPATIBLEIDS, NULL, NULL, 0, &devClassPropRequiredSize);
if (!succ)
{
// This shouldn't happen!
continue;
}
}
它曾经工作多年,但现在我得到FALSE
了SetupDiGetDeviceRegistryProperty
,最后一个错误是“传递给系统调用的数据区域太小”。看来我的调用参数对应于这个函数的文档:http: //msdn.microsoft.com/en-us/library/windows/hardware/ff551967 (v=vs.85).aspx
有什么想法有什么问题吗?