функция обратного вызова DRIVER_ADD_DEVICE (wdm.h)
Подпрограмма AddDevice отвечает за создание функциональных объектов устройств (FDO) или фильтрацию объектов устройств (фильтр DO) для устройств, перечисленных диспетчером Plug and Play (PnP).
Синтаксис
DRIVER_ADD_DEVICE DriverAddDevice;
NTSTATUS DriverAddDevice(
[in] _DRIVER_OBJECT *DriverObject,
[in] _DEVICE_OBJECT *PhysicalDeviceObject
)
{...}
Параметры
[in] DriverObject
Указатель на структуру DRIVER_OBJECT , предоставленный вызывающим. Это объект драйвера драйвера.
[in] PhysicalDeviceObject
Предоставленный вызывающим объектом указатель на структуру DEVICE_OBJECT , представляющую объект физического устройства (PDO), созданный драйвером более низкого уровня.
Возвращаемое значение
Если подпрограмма завершается успешно, она должна вернуть STATUS_SUCCESS. В противном случае он должен вернуть одно из значений состояния ошибки, определенных в ntstatus.h.
Комментарии
Все драйверы режима ядра, поддерживающие PnP, должны предоставлять подпрограмму AddDevice .
Подпрограмма AddDevice драйвера должна называться XxxAddDevice, где Xxx — это префикс для конкретного драйвера. Подпрограмма DriverEntry драйвера должна хранить адрес подпрограммы AddDevice в файле DriverObject-DriverExtension-AddDevice>>.
Основные обязанности подпрограммы AddDevice — вызов IoCreateDevice для создания объекта устройства, а затем вызов IoAttachDeviceToDeviceStack для подключения объекта устройства к стеку устройств. Подробные сведения о реализации процедуры AddDevice для драйвера см. в статье Создание процедуры AddDevice.
Подпрограмма AddDevice выполняется в контексте системного потока в IRQL = PASSIVE_LEVEL.
Примеры
Чтобы определить подпрограмму обратного вызова AddDevice , необходимо сначала предоставить объявление функции, определяющее тип определяемой процедуры обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.
Например, чтобы определить подпрограмму обратного вызова AddDevice с именем MyAddDevice<
, используйте тип DRIVER_ADD_DEVICE, как показано в следующем примере кода:
DRIVER_ADD_DEVICE MyAddDevice;
Затем реализуйте процедуру обратного вызова следующим образом:
_Use_decl_annotations_
NTSTATUS
MyAddDevice(
struct _DRIVER_OBJECT *DriverObject,
struct _DEVICE_OBJECT *PhysicalDeviceObject
)
{
// Function body
}
Тип функции DRIVER_ADD_DEVICE определяется в файле заголовка Wdm.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку _Use_decl_annotations_
в определение функции. Заметка _Use_decl_annotations_
гарантирует, что будут использоваться заметки, которые применяются к типу функции DRIVER_ADD_DEVICE в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов WDM. Сведения о _Use_decl_annotations_
см. в статье Поведение функции с заметками.
Требования
Требование | Значение |
---|---|
Целевая платформа | Персональный компьютер |
Верхняя часть | wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | Вызывается по адресу PASSIVE_LEVEL (см. раздел "Замечания"). |