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


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

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

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

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

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

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

    Большинство драйверов функций вызывают WdfDeviceInitSetPnpPowerEventCallbacks для регистрации функций PnP и функций обратного вызова питания. Дополнительные сведения об этих функциях обратного вызова см. в разделе «Поддержка PnP и управление питанием в драйверах функций».

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

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

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

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

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

  • Задание атрибутов запроса ввода-вывода.

    Если драйвер получит запросы ввода-вывода из объектов очереди платформы, драйвер может вызывать WdfDeviceInitSetRequestAttributes для настройки памяти контекста, которую платформа будет назначать объектам запросов устройства. Дополнительные сведения см. в разделе Использование контекста объекта запроса.

  • Настройка характеристик устройства.

    Как правило, драйвер функции вызывает некоторые из следующих методов, чтобы указать характеристики устройства:

    • WdfDeviceInitSetDeviceType, чтобы определить тип оборудования, который поддерживает драйвер.
    • WdfDeviceInitSetIoType, чтобы определить метод доступа к буферам данных, если драйвер обрабатывает запросы ввода-вывода из приложений.
    • WdfDeviceInitSetCharacteristics, чтобы задать характеристики устройства, например, доступно ли устройство только для чтения или поддерживает съемный носитель.
    • WdfDeviceInitSetExclusive, если устройство требует монопольного доступа к одному приложению одновременно.
    • WdfDeviceInitSetPowerInrush, если устройство требует скачка тока при переходе от состояния низкого энергопотребления к рабочему состоянию (D0).
    • WdfDeviceInitSetPowerPageable или WdfDeviceInitSetPowerNotPageable, чтобы указать, должен ли драйвер получить доступ к страничным данным, пока система переходит между спящим состоянием и рабочим состоянием (S0).
    • WdfDeviceInitAssignName, чтобы назначить имя объекту устройства.
    • WdfDeviceInitAssignSDDLString, чтобы назначить дескриптор безопасности объекту устройства.
    • WdfDeviceInitSetDeviceClass, чтобы определить класс установки устройства.
  • Получение свойств устройства.

    Иногда драйверы функций должны получать сведения о свойствах устройства, заданных драйвером шины устройства или другим драйвером нижнего уровня. Драйвер может вызывать WdfFdoInitQueryProperty или WdfFdoInitAllocAndQueryProperty для получения этих сведений. Новые драйверы, предназначенные для Windows 8.1 и более поздних версий, могут вызывать WdfFdoInitQueryPropertyEx и WdfFdoInitAllocAndQueryPropertyEx.

  • Доступ к разделу реестра устройства.

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

  • Создание конфигурации дочернего списка по умолчанию для динамического перечисления.

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

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

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