функция обратного вызова DRIVER_INITIALIZE (wdm.h)
DriverEntry — это первая подпрограмма, вызываемая после загрузки драйвера, которая отвечает за инициализацию драйвера.
Синтаксис
DRIVER_INITIALIZE DriverInitialize;
NTSTATUS DriverInitialize(
[in] _DRIVER_OBJECT *DriverObject,
[in] PUNICODE_STRING RegistryPath
)
{...}
Параметры
[in] DriverObject
Указатель на структуру DRIVER_OBJECT . Это объект драйвера драйвера.
[in] RegistryPath
Указатель на подсчитываемую строку Юникода, указывающую путь к разделу реестра драйвера.
Возвращаемое значение
Если подпрограмма завершается успешно, она должна вернуть STATUS_SUCCESS. В противном случае он должен вернуть одно из значений состояния ошибки, определенных в Ntstatus.h.
Комментарии
Параметр DriverObject предоставляет подпрограмме DriverEntry указатель на объект драйвера драйвера, который выделяется диспетчером ввода-вывода. Подпрограмма DriverEntry должна заполнить объект driver точками входа для стандартных процедур драйвера.
Указатель DriverObject предоставляет драйверу доступ к DriverObject-HardwareDatabase>, который указывает на подсчитываемую строку Юникода, которая указывает путь к дереву \Registry\Machine\Hardware реестра.
Строка пути реестра, на которую указывает RegistryPath , имеет вид \Registry\Machine\System\CurrentControlSet\Services\DriverName. Драйвер может использовать этот путь для хранения сведений о драйвере; См . раздел Разделы реестра для драйверов. Подпрограмма DriverEntry должна сохранить копию строки Юникода, а не указатель, так как диспетчер ввода-вывода освобождает буфер RegistryPath после возврата DriverEntry .
Дополнительные сведения о реализации подпрограммы DriverEntry см. в разделе Написание процедуры DriverEntry.
Хотя можно назвать эту подпрограмму не DriverEntry, делать это не рекомендуется. Предоставляемые DDK средства сборки автоматически сообщают компоновщику, что точка входа драйвера называется DriverEntry, поэтому при присвоении подпрограмме другого имени необходимо изменить средства сборки. Дополнительные сведения о средствах сборки см. в разделе Создание драйвера.
Примеры
Чтобы определить подпрограмму обратного вызова DriverEntry , необходимо сначала предоставить объявление функции, определяющее тип определяемой процедуры обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.
Чтобы определить подпрограмму обратного вызова DriverEntry , используйте тип DRIVER_INITIALIZE, как показано в следующем примере кода:
DRIVER_INITIALIZE DriverEntry;
Затем реализуйте процедуру обратного вызова следующим образом:
_Use_decl_annotations_
NTSTATUS
DriverEntry(
struct _DRIVER_OBJECT *DriverObject,
PUNICODE_STRING RegistryPath
)
{
// Function body
}
Тип функции DRIVER_INITIALIZE определяется в файле заголовка Wdm.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте заметку в _Use_decl_annotations_
определение функции. Заметка _Use_decl_annotations_
гарантирует, что будут использоваться заметки, которые применяются к типу функции DRIVER_INITIALIZE в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в разделе Объявление функций с помощью типов ролей функций для драйверов WDM. Дополнительные сведения о _Use_decl_annotations_
см. в статье Поведение функции с заметками.
Требования
Требование | Значение |
---|---|
Целевая платформа | Персональный компьютер |
Верхняя часть | wdm.h (включая Mcd.h, Ntddk.h, Ntifs.h, Wudfwdm.h) |
IRQL | Звонил на PASSIVE_LEVEL. |