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