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


Создание объекта устройства

Монолитный драйвер должен создать объект устройства для каждого физического, логического или виртуального устройства, для которого он обрабатывает запросы ввода-вывода. Драйвер, который не создает объект устройства для устройства, не получает irp для устройства.

В некоторых технологических областях мини-диск, связанный с драйвером класса или драйвером порта, не должен создавать собственные объекты устройства. Вместо этого драйвер класса или порта создает объект устройства и получает все irP для устройства. Затем драйвер класса или порта использует метод, зависящий от драйвера, для передачи запроса ввода-вывода в мини-диск. Ознакомьтесь с документацией по конкретной технологической области, чтобы определить, предоставляет ли корпорация Майкрософт драйвер класса или порта, который создает объекты устройств от имени вашего драйвера.

Драйверы вызывают IoCreateDevice или IoCreateDeviceSecure для создания объектов устройства. Дополнительные сведения о том, какую подпрограмму использовать, см. в следующих разделах.

Создание объектов устройств для драйверов функций И фильтров WDM

Создание объектов устройств для драйверов шины WDM

Создание объектов устройств для драйверов, отличных от WDM

Когда драйвер создает объект устройства, он предоставляет следующие сведения в IoCreateDevice или IoCreateDeviceSecure:

  • Размер расширения устройства. Расширение устройства — это выделенная системой область хранения, которую драйвер может использовать для хранилища для конкретного устройства. Дополнительные сведения см. в разделе Расширения устройств.

  • Системная константа, указывающая тип устройства , представленный объектом устройства. Дополнительные сведения см. в разделе Указание типов устройств.

  • Одна или несколько определяемых системой констант ORed, указывающих характеристики устройства. Дополнительные сведения см. в разделе Указание характеристик устройства.

  • Логическое значение с именем Exclusive, указывающее, следует ли задать бит в флагах объекта устройства с помощью DO_EXCLUSIVE, указывая, что драйвер обслуживает монопольное устройство, например видео, последовательное, параллельное или звуковое устройство. Драйверы WDM должны установить для параметра Exclusiveзначение FALSE. Дополнительные сведения см. в разделе Указание монопольного доступа к объектам устройств.

  • Указатель на объект драйвера для драйвера. Функция или драйвер фильтра WDM получает указатель на объект драйвера в качестве параметра для своей подпрограммы AddDevice . Все драйверы получают указатель на свой объект driver в процедуре DriverEntry . Система использует этот указатель для связи драйвера с объектом устройства.

  • Необязательный указатель на строку Юникода, завершающуюся null (DeviceName), именующую устройство. Водители WDM, кроме водителей автобусов, не предоставляют имя устройства; это обходит функции безопасности диспетчера PnP. Дополнительные сведения см. в разделе Именованные объекты устройств.

Если вызов IoCreateDevice или IoCreateDeviceSecure завершается успешно, диспетчер ввода-вывода предоставляет хранилище для самого объекта устройства и для всех других структур данных, связанных с объектом устройства, включая расширение устройства, которое он инициализирует нулями.

Создание объектов устройств для драйверов функций И фильтров WDM

Драйверы WDM, отличные от водителей автобусов, вызывают IoCreateDevice , чтобы создать свои объекты устройств. Большинство драйверов WDM создают объекты устройств из процедур AddDevice . Некоторые драйверы, например драйверы дисков, которые должны реагировать на ioCTL макета диска, вызывают IoCreateDevice из подпрограммы диспетчеризации.

Если в разделах документации по пакету драйверов Windows (WDK) не указано иное, драйвер должен создавать объекты устройства в процедуре AddDevice . Дополнительные сведения см. в разделе Написание процедуры AddDevice.

Создание объектов устройств для драйверов шины WDM

Драйвер шины WDM создает PDO при перечислении нового устройства в ответ на запрос IRP_MN_QUERY_DEVICE_RELATIONS , если типом отношения является BusRelations.

Следующие правила определяют, вызывает ли драйвер шины IoCreateDevice или IoCreateDeviceSecure для создания объекта устройства:

  • Если устройство можно использовать в необработанном режиме, оно должно вызвать IoCreateDeviceSecure.

  • Если устройство не поддерживает необработанный режим, драйвер шины может использовать IoCreateDevice или IoCreateDeviceSecure. IoCreateDevice можно использовать, если система безопасности по умолчанию для устройств в шине является достаточной; IoCreateDeviceSecure можно использовать для указания более строгого дескриптора безопасности. Дополнительные сведения см. в разделе Управление доступом к устройствам.

Создание объектов устройств для драйверов, отличных от WDM

Драйвер, отличный от WDM, использует IoCreateDevice для создания неименованных объектов устройств и IoCreateDeviceSecure для создания именованных объектов устройств. Обратите внимание, что неименованные объекты устройства драйвера, отличного от WDM, недоступны в пользовательском режиме, поэтому драйвер обычно должен создать по крайней мере один именованный объект.