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


Статическое перечисление

Статическое перечисление — это способность драйвера обнаруживать и сообщать о существовании устройств во время инициализации системы, но с ограниченной возможностью информирования о последующих изменениях в конфигурации системы.

Драйверы шины могут использовать статическое перечисление, если число и тип устройств или функциональных вложенных элементов предопределено и не зависит от конфигурации системы, в которой работает драйвер.

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

Статические дочерние списки

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

Создание статического дочернего списка

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

Когда фреймворк вызывает функцию обратного вызова драйвера шины EvtDriverDeviceAdd, она должна вызвать WdfDeviceCreate, чтобы создать FDO для родительского устройства. Дополнительные сведения о создании FDO см. в Создание объектов устройств в функциональном драйвере.

Затем драйвер должен перечислить дочерние устройства родительского устройства, создать физические объекты устройств (PDOs) для дочерних устройств и добавить их в список дочерних устройств.

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

Чтобы создать PDO для обнаруженного дочернего устройства, драйвер шины должен:

  1. Вызовите WdfPdoInitAllocate , чтобы получить WDFDEVICE_INIT структуру.

  2. Инициализация структуры WDFDEVICE_INIT.

  3. Вызовите WdfDeviceCreate для создания объекта устройства фреймворка, который представляет собой PDO.

Дополнительные сведения о создании PDO см. в разделе "Создание объектов устройств в драйвере шины".

После вызова WdfDeviceCreate драйвер должен вызвать WdfFdoAddStaticChild , чтобы добавить дочернее устройство в дочерний список.

Изменение статического дочернего списка

Так как драйверы должны использовать только статические дочерние списки для конфигураций устройств, которые предопределены и постоянны, не требуется изменять статический дочерний список после его создания. Если драйвер определяет, что дочернее устройство стало недоступным, драйвер может вызвать WdfPdoMarkMissing. (Если дочернее устройство остается доступным, но становится неотзывчивым и непригодным для использования, драйвер должен задать член Ошибка структуры WDF_DEVICE_STATE в WdfTrue, а затем вызвать WdfDeviceSetDeviceState.)

Обход статического дочернего списка

Если необходимо получить содержимое статического дочернего списка, драйвер может пройти по списку, выполнив следующие действия:

  1. Вызов WdfFdoLockStaticChildListForIteration.

  2. Вызов WdfFdoRetrieveNextStaticChild столько раз, сколько необходимо.

  3. Вызов WdfFdoUnlockStaticChildListFromIteration.