看看系统物理设备枚举的代码问题,谢谢!!!
GUID guid=Device_CLASS_GUID;//在头文件已经定义过了
SP_DEVICE_INTERFACE_DATA ifdata = {sizeof(SP_DEVICE_INTERFACE_DATA)};
SP_DEVINFO_DATA did = {sizeof(SP_DEVINFO_DATA)};
SP_DEVICE_INTERFACE_DETAIL_DATA didd={sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA)};
HDEVINFO info = SetupDiGetClassDevs(NULL, NULL,NULL,DIGCF_ALLCLASSES);
for(int index=0;;index++)
{
if(SetupDiEnumDeviceInterfaces(info,
&did,
&guid,
index,
&ifdata))
{
if(SetupDiGetDeviceInterfaceDetail(info,&ifdata,&didd,offsetof (SP_DEVICE_INTERFACE_DETAIL_DATA, DevicePath) + sizeof(TCHAR),NULL,NULL))
{
SetupDiOpenDeviceInterface(info, didd.DevicePath, 0, &ifdata);
SetupDiGetDeviceRegistryProperty(info,
&did,
SPDRP_MFG,
NULL,
(PBYTE) mfgname,
sizeof(mfgname),
NULL);
MessageBox(s);//s.Format("%d",mfgname)
}
}
else
{
break;
}
}
SetupDiDestroyDeviceInfoList(info);
问题是SetupDiEnumDeviceInterfaces函数总是返回false,用GetLastError查看提示是”没有可用的数据了“。此函数一次都不执行,SetupDiGetClassDevs函数执行是成功的,麻烦大家帮吗看一看,谢谢!
[解决办法]
SetupDiGetClassDevs的第一个参数应该跟SetupDiEnumDeviceInterfaces的第三个参数匹配。恰好第一个设备接口不是你希望的类型。
[解决办法]
你调用SetupDiGetClassDevs函数的时候没有加DIGCF_DEVICEINTERFACE标志。