Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Монолитный драйвер должен создать объект устройства для каждого физического, логического или виртуального устройства, для которого он обрабатывает запросы ввода-вывода. Драйвер, который не создает объект устройства, не получает никаких IRP для этого устройства.
В некоторых областях технологий минидрайвер, связанный с драйвером класса или портов, не должен создавать собственные объекты устройств. Вместо этого класс или порт-драйвер создает объект устройства и получает все IRP для устройства. Затем драйвер класса или порта использует метод, зависящий от драйвера, для передачи запроса ввода-вывода в мини-драйвер. Ознакомьтесь с документацией по определенной области технологий, чтобы определить, предоставляет ли корпорация Майкрософт класс или драйвер портов, создающий объекты устройств от имени драйвера.
Драйверы вызывают IoCreateDevice или IoCreateDeviceSecure для создания объектов устройства. Дополнительные сведения о том, какую подпрограмму следует использовать, см. в следующих разделах.
Создание объектов устройств для драйверов функций WDM и фильтров
Создание объектов устройств для драйверов шины WDM
Создание объектов устройств для драйверов, отличных от WDM
Когда драйвер создает объект устройства, он предоставляет следующие сведения в IoCreateDevice или IoCreateDeviceSecure:
Размер расширения устройства. Расширение устройства — это область хранения, выделенная системой, которую драйвер может использовать для хранилища для конкретного устройства. Дополнительные сведения см. в расширениях устройств.
Системная константа, указывающая deviceType , представленную объектом устройства. Дополнительные сведения см. в разделе Указание типов устройств.
Одна или несколько объединённых (по ИЛИ) констант, определяемых системой и указывающих характеристики устройства. Дополнительные сведения см. в разделе "Указание характеристик устройства".
Логическое значение с именем Exclusive, которое указывает, следует ли установить бит в флагах объекта устройства с помощью DO_EXCLUSIVE, чтобы указать, что драйвер обслуживает монопольное устройство, такое как видео, последовательное, параллельное или звуковое устройство. Драйверы WDM должны установить Exclusive в значение FALSE. Дополнительные сведения см. в разделе Указание эксклюзивного доступа к объектам устройств.
Указатель на объект драйвера для драйвера. Функция WDM или драйвер фильтра получает указатель на объект драйвера в качестве параметра для своей подпрограммы AddDevice. Все драйверы получают указатель на объект драйвера в процедуре DriverEntry. Система использует этот указатель для связывания драйвера с объектом устройства.
Необязательный указатель на строку Юникода (DeviceName), завершающуюся символом NULL и обозначающую устройство. Драйверы 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, недоступны в пользовательском режиме, поэтому драйвер обычно должен создать по крайней мере один именованный объект.