Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Понимание различий между классами установки устройств и классами интерфейса устройств имеет решающее значение для успешной разработки драйверов Windows и управления устройствами. Хотя эти классы могут показаться похожими, они служат принципиально разными целями в экосистеме устройств Windows. Классы установки управляют установкой и настройкой устройств операционной системой. Классы интерфейса обеспечивают взаимодействие среды выполнения и функциональные возможности между драйверами, приложениями и устройствами. Понимание этого различия помогает выбрать правильный тип класса для установки устройства, реализовать правильные уведомления об устройстве и избежать распространенных ошибок разработки.
Устройство часто принадлежит классу установки и предоставляет несколько интерфейсов устройств в разных классах интерфейса одновременно. Тем не менее, два типа классов служат разным целям и не являются взаимозаменяемыми.
Comparison
В следующей таблице приведены основные различия и связи между классами установки и классами интерфейса.
| Аспект | Классы установки | Классы интерфейса |
|---|---|---|
| Основное назначение | Группирование устройств с аналогичной установкой и конфигурацией | Группирование интерфейсов устройств, которые обеспечивают аналогичные функциональные возможности и обмен данными |
| Использование | Используется Windows во время установки устройства | Используется драйверами и приложениями для взаимодействия с устройством |
| Определения GUID | Обычно определяется в Devguid.h | Определяется в файлах заголовков для конкретного устройства (например, Ntddmou.h, Ntddpar.h) |
| Критерии группирования | Устройства, установленные и настроенные аналогичным образом | Как правило, интерфейсы устройств, реализующие определенный контракт ввода-вывода |
| Уведомление | Не используется для уведомлений о прибытии или удалении устройства | Используется для регистрации уведомлений о прибытии и удалении интерфейса устройства |
| Examples | Датчики, встроенное ПО, Bluetooth | Аудиозапись, отрисовка звука, датчик внешнего света |
| Связь | Устройство принадлежит одному классу установки | Устройство может предоставлять ноль или больше интерфейсов устройств в разных классах интерфейса |
| Продолжительность жизни | Релевантный во время установки | Релевантный во время операции устройства |
Важно различать два типа классов устройств: классы интерфейса устройства и классы установки устройств. Два могут быть легко путать. В коде пользовательского режима оба класса используют один набор функций установки устройства. Они также используют тот же набор структур данных (наборы сведений об устройстве).
Один и тот же класс установки, разные классы интерфейса:
- Устройства: два разных устройства датчика
- Класс установки: оба устройства находятся в классе Датчиков .
- Классы интерфейса: один датчик предоставляет интерфейс устройства датчика внешнего света, а другой предоставляет интерфейс устройства акселерометра.
Рассмотрим usb-устройство мыши и USB-устройство клавиатуры. Оба используют один и тот же класс интерфейса (устройство human Interface). Но они относятся к разным классам установки, мышью и клавиатуре соответственно.
Один и тот же класс интерфейса, разные классы установки:
- Устройства: USB-мышь и USB-клавиатура
- Класс интерфейса: оба устройства используют один и тот же класс интерфейса (устройство human Interface) для взаимодействия с системой.
- Классы установки: устройство мыши принадлежит классу установки мыши , а устройство клавиатуры принадлежит классу установки клавиатуры .
Классы установки устройства
Классы установки устройств — это стандартные категории, используемые исключительно для установки и настройки устройств в Windows. Они помогают операционной системе понять, как управлять устройством во время установки. Классы установки предоставляют механизм группировки устройств, установленных и настроенных таким же образом. Дополнительные сведения о классах установки см. в разделе Системные классы установки устройств, доступные поставщикам.
Классы установки устройств Windows определяются в системном файле Devguid.h. Этот файл определяет ряд идентификаторов GUID для классов установки. Однако классы установки устройства, представленные в Devguid.h , не должны путаться с классами интерфейса устройства. Файл Devguid.h содержит только идентификаторы GUID для классов установки.
Классы интерфейса устройства
Классы интерфейса устройства предоставляют механизм группировки интерфейсов устройств в соответствии с общими характеристиками или функциональными возможностями. Драйверы и пользовательские приложения могут регистрировать уведомления об интерфейсах устройств в определенном классе интерфейса. Это означает, что они получают уведомления, когда любой интерфейс устройства, принадлежащий этому классу, включен (прибывает) или отключен (удален). Им не нужно отслеживать отдельные устройства. Классы интерфейса устройства группируют интерфейсы устройств, предоставляемые устройствами. Вы регистрируете уведомления о прибытии и удалении интерфейсов устройств.
Определения классов интерфейса не предоставляются в одном файле. Класс интерфейса устройства всегда определяется в файле заголовка, который принадлежит исключительно определенному классу устройств. Например, Ntddmou.h содержит определение GUID_DEVINTERFACE_MOUSE, GUID, представляющий класс интерфейса мыши. Ntddpar.h определяет GUID класса интерфейса для параллельных устройств. Ntddpcm.h определяет guid класса стандартного интерфейса для устройств PCMCIA. Ntddstor.h определяет GUID класса интерфейса для устройств хранения.
Чтобы зарегистрировать уведомления интерфейса устройства, используйте идентификаторы GUID, найденные в файлах заголовков, относящихся к классу интерфейса устройства. Эти идентификаторы GUID позволяют получать уведомления при поступлении экземпляра интерфейса устройства. Если драйвер регистрирует уведомление с помощью GUID класса установки вместо GUID класса интерфейса, он не уведомляется при поступлении интерфейса.
При определении нового класса интерфейса не используйте один GUID для идентификации класса установки и класса интерфейса.