枚举已安装的设备接口

不得通过直接访问注册表项来枚举系统中的设备接口。 与任何注册表项一样,密钥的位置、名称或格式可能会在不同版本的 Windows 之间更改。

使用以下准则安全地枚举设备接口。

用户模式应用程序应遵循以下步骤:

  • 使用 配置管理器 函数:

    使用 CM_Get_Device_Interface_List 检索指定的 InterfaceClassGuid 的设备接口列表。 可以选择将列表限制为仅特定设备公开的设备接口,方法是将 pDeviceID 参数设置为特定的设备实例标识符。

    若要仅包括系统中存在(已启用)的设备接口,请在 ulFlags 参数中设置 CM_GET_DEVICE_INTERFACE_LIST_PRESENT 标志。

  • 使用 SetupApi 函数:

    1. 使用 SetupDiGetClassDevs 或 SetupDiGetClassDevsEx,在 Flags 参数中设置 DIGCF_DEVICEINTERFACE 标志,以检索指定设备接口类的设备接口。 可以选择将列表限制为仅特定设备公开的设备接口,方法是将 Enumerator 参数设置为特定的设备实例标识符。

      若要仅包括系统中存在(已启用)的设备接口,请在 Flags 参数中设置 DIGCF_PRESENT 标志。

    2. 使用 SetupDiEnumDeviceInterfaces 枚举上述调用返回的接口。

内核模式驱动程序应使用 IoGetDeviceInterfaces 检索由指定 InterfaceClassGuid 标识的设备接口列表。 可以选择通过设置 PhysicalDeviceObject 参数将列表限制为仅特定设备暴露的设备接口。