Поделиться через


Перечисление установленных интерфейсов устройств

Не следует перечислять интерфейсы устройств в системе путем прямого доступа к разделам реестра. Как и в случае с любым разделом реестра, расположение, имя или формат ключа могут меняться в разных версиях Windows.

Используйте следующие рекомендации для безопасного перечисления интерфейсов устройств.

Приложения в пользовательском режиме должны выполнять следующие действия.

  • Использование функций диспетчера конфигураций :

    Используйте CM_Get_Device_Interface_List , чтобы получить список интерфейсов устройств в указанном InterfaceClassGuid. При необходимости можно ограничить список только интерфейсами устройств, предоставляемыми определенным устройством, задав для параметра pDeviceID определенный идентификатор экземпляра устройства.

    Чтобы включить только интерфейсы устройств, которые присутствуют (включены) в системе, установите флаг CM_GET_DEVICE_INTERFACE_LIST_PRESENT в параметре ulFlags .

  • Использование функций SetupApi :

    1. Используйте SetupDiGetClassDevs или SetupDiGetClassDevsEx с флагом DIGCF_DEVICEINTERFACE , установленным в параметре Flags , чтобы получить интерфейсы устройства для указанного класса интерфейса устройства. При необходимости можно ограничить список только интерфейсами устройств, предоставляемыми определенным устройством, задав для параметра Enumerator определенный идентификатор экземпляра устройства.

      Чтобы включить только интерфейсы устройств, которые присутствуют (включены) в системе, установите флаг DIGCF_PRESENT в параметре Flags .

    2. Используйте SetupDiEnumDeviceInterfaces для перечисления интерфейсов, возвращаемых приведенными выше вызовами.

Драйверы в режиме ядра должны использовать IoGetDeviceInterfaces для получения списка интерфейсов устройств в указанном InterfaceClassGuid. При необходимости можно ограничить список только интерфейсами устройств, предоставляемыми определенным устройством, задав параметр PhysicalDeviceObject .