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

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

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

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

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

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

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

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

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

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

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

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

  • Настройка атрибутов запроса ввода-вывода.

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

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

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

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

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

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

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

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

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

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

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