Создание объектов устройств в драйвере шины
Каждый драйвер автобуса должен создать объект устройства платформы, когда обнаруживает, что дочернее устройство подключено к родительскому устройству. Родительским устройством обычно является шина, но это также может быть многофункциональное устройство, для которого каждой функции требуется отдельный набор драйверов (например, звуковая карта, поддерживающая цифровой звук и MIDI). Объекты устройства, создаваемые драйверами шины, называются физическими объектами устройств (PDO), так как каждый из них представляет собой фактическое подключение одного элемента оборудования (дочернего элемента) к другому (родительскому).
Процесс идентификации и создания отчетов об устройствах, подключенных к шине, называется перечислением шины.
Если драйвер автобуса выполняет динамическое перечисление шины, функция обратного вызова EvtChildListCreateDevice получает дескриптор структуры WDFDEVICE_INIT .
Если драйвер автобуса выполняет статическое перечисление шины, он должен вызвать WdfPdoInitAllocate , чтобы получить дескриптор структуры WDFDEVICE_INIT.
Дополнительные сведения о перечислении шины см. в разделе Перечисление устройств в шине.
Драйвер автобуса может вызывать набор методов инициализации объекта платформы устройства, которые хранят сведения в 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 см. в статье Создание объектов устройств в драйвере функции.