функция обратного вызова 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 должна заполнить объект драйвера точками входа для стандартных подпрограмм драйвера.
Указатель 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 (include Mcd.h, Ntddk.h, Ntifs.h, Wudfwdm.h) |
IRQL | Звонил в PASSIVE_LEVEL. |