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

Каждый драйвер автобуса должен создать объект устройства платформы, когда обнаруживает, что дочернее устройство подключено к родительскому устройству. Родительским устройством обычно является шина, но это также может быть многофункциональное устройство, для которого каждой функции требуется отдельный набор драйверов (например, звуковая карта, поддерживающая цифровой звук и MIDI). Объекты устройства, создаваемые драйверами шины, называются физическими объектами устройств (PDO), так как каждый из них представляет собой фактическое подключение одного элемента оборудования (дочернего элемента) к другому (родительскому).

Процесс идентификации и создания отчетов об устройствах, подключенных к шине, называется перечислением шины.

Дополнительные сведения о перечислении шины см. в разделе Перечисление устройств в шине.

Драйвер автобуса может вызывать набор методов инициализации объекта платформы устройства, которые хранят сведения в WDFDEVICE_INIT структуре. Кроме того, драйверы автобуса могут вызывать методы инициализации PDO платформы.

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

  • Регистрация функций обратного вызова для конкретного водителя автобуса.

    Большинство водителей автобуса вызывают WdfPdoInitSetEventCallbacks, так как они должны указать системные аппаратные ресурсы, необходимые устройству. Дополнительные сведения об указании аппаратных ресурсов см. в разделе Аппаратные ресурсы для драйверов Framework-Based. Дополнительные функции обратного вызова можно зарегистрировать, если устройство и драйвер поддерживают извлечение.

  • Строки идентификации устройств отчетов.

    Драйверы шины должны сообщать о строках идентификации устройства, вызывая WdfPdoInitAssignDeviceID, WdfPdoInitAssignInstanceID, WdfPdoInitAddCompatibleID и WdfPdoInitAddHardwareID для каждого типа строки, поддерживаемых устройством. Кроме того, драйверы шины, использующие платформу версии 1.9 или более поздней, могут вызывать WdfPdoInitAssignContainerID.

  • Сообщает, может ли водитель автобуса поддерживать устройство в необработанном режиме.

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

  • Предоставление отображаемого текста, описывающего устройство.

    Водители автобуса вызывают WdfPdoInitAddDeviceText и WdfPdoInitSetDefaultLocale , чтобы предоставить пользователям текст, описывающий устройство, на нескольких языках.

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

    Последним шагом в создании объекта устройства является вызов WdfDeviceCreate.

Если драйвер обнаруживает ошибку при инициализации структуры WDFDEVICE_INIT, полученной из WdfPdoInitAllocate, драйвер должен вызвать WdfDeviceInitFree вместо WdfDeviceCreate.

После создания объекта устройства драйвер автобуса обычно вызывает WdfDeviceSetPnpCapabilities и WdfDeviceSetPowerCapabilities, чтобы сообщить о Plug and Play и возможностях питания устройства.

Каждый драйвер автобуса также является драйвером-функцией адаптера шины. Поэтому драйвер должен также предоставить функцию обратного вызова EvtDriverDeviceAdd . Эта функция обратного вызова создает объект функционального устройства (FDO) для каждого адаптера шины в системе. Дополнительные сведения о создании FDO см. в статье Создание объектов устройств в драйвере функции.