【发布时间】:2018-10-19 12:25:45
【问题描述】:
我列举了一台机器上的所有设备如下:
HDEVINFO hDevList = SetupDiGetClassDevs( NULL, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT | DIGCF_ALLCLASSES /*| DIGCF_PROFILE*/ );
for ( int i = 0; true; ++i )
{
SP_DEVINFO_DATA devinfo_data = {0};
devinfo_data.cbSize = sizeof(SP_DEVINFO_DATA);
if ( !SetupDiEnumDeviceInfo( hDevList, i, &devinfo_data ) )
break;
//TODO: get device interface GUID
//...
}
SetupDiDestroyDeviceInfoList( hDevList );
如何获取每个项目的设备接口 GUID?
我试过了
SP_DEVICE_INTERFACE_DATA interface_data = {0};
interface_data.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
SetupDiEnumDeviceInterfaces( hDevList, &devinfo_data, ???, 0, &interface_data );
但第三个参数似乎需要实际的 GUID。这实际上是我想要得到的! NULL 不是一个选项。
【问题讨论】:
-
我也有同样的问题,但只对 USB 设备感兴趣。它是所有非集线器或控制器的 USB 设备的指南。在某个地方的 ddk 标头中有一个定义,但您也会看到它在您正在使用的 2 个 setupapi 函数的示例中被大量使用。如果我找到指南或标题,我将尝试更新我的答案。但我想你会先找到它。我希望有人知道如何在每台设备上获取信息,我想这样做只是为了好玩。但是我真的只需要USB进行一些固件调试。
-
我也有同样的问题,但只对 USB 设备感兴趣。它是所有非集线器或控制器的 USB 设备的指南。在某个地方的 ddk 标头中有一个定义,但您也会看到它在您正在使用的 2 个 setupapi 函数的示例中被大量使用。如果我找到指南或标题,我将尝试更新我的答案。但我想你会先找到它。我希望有人知道如何在每台设备上获取信息,我想这样做只是为了好玩。但我真的只需要USB进行一些固件调试。哦,顺便说一句,该函数不会返回 DeviceInterfaceGUID 或给你一个
-
第三个参数是设备接口 class GUID,而不是设备接口 GUID。您必须说明您正在关注哪类接口。您无法获得所有类的所有接口。没有固定的类列表,但 Windows 已经定义了很多。例如 GUID_DEVINTERFACE_USB_DEVICE 将为您提供 USB 设备的设备接口。 docs.microsoft.com/en-us/windows-hardware/drivers/install/…
-
没有。至少我们可以得到所有
device interface class。 docs.microsoft.com/en-us/windows-hardware/drivers/install/…
是的,这些词可能会产生误导,API可能会被滥用。但目的很明确。 如何为给定设备获取所有支持的device interface class? API/方法是什么? @SimonMourier -
@CodeDoggo:说“设备接口类 GUID”是正确的......就像你在上一句中所做的那样。