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

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

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

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

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

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

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

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

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

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

При необходимости драйвер может вызвать 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.