DRIVER_INITIALIZE回调函数 (wdm.h)
DRIVER_INITIALIZE 是驱动程序初始化入口点的类型定义,通常 DriverEntry命名。 这是加载驱动程序后调用的第一个例程。
语法
DRIVER_INITIALIZE DriverInitialize;
NTSTATUS DriverInitialize(
[in] _DRIVER_OBJECT *DriverObject,
[in] PUNICODE_STRING RegistryPath
)
{...}
参数
[in] DriverObject
指向驱动程序 DRIVER_OBJECT 结构的指针。
[in] RegistryPath
指向指定驱动程序注册表项路径的计数 Unicode 字符串的指针。
返回值
如果例程成功,则必须返回STATUS_SUCCESS。 否则,它必须返回 Ntstatus.h 中定义的错误状态值之一。
言论
DriverObject 参数提供 DriverEntry 例程,其中包含由 I/O 管理器分配的驱动程序对象的指针。 DriverEntry 例程必须使用驱动程序标准例程的入口点填充驱动程序对象。
DriverObject 指针为驱动程序提供对 DriverObject->HardwareDatabase的访问权限,该字符串指向指定注册表 \Registry\Machine\Hardware 树的路径的已计数 Unicode 字符串。
RegistryPath 指向的注册表路径字符串的格式为 \Registry\Machine\System\CurrentControlSet\Services\DriverName。 驱动程序可以使用此路径来存储特定于驱动程序的信息;请参阅驱动程序 的注册表项。 DriverEntry 例程应保存 Unicode 字符串的副本,而不是指针,因为 I/O 管理器在 DriverEntry 返回后释放 RegistryPath 缓冲区。
有关实现 DriverEntry 例程的详细信息,请参阅 编写 DriverEntry 例程。
虽然可以命名此例程,而不是 DriverEntry,但不建议这样做。 DDK 提供的生成工具会自动通知链接器驱动程序的入口点 DriverEntry,因此提供例程的另一个名称需要修改生成工具。 有关生成工具的详细信息,请参阅 生成驱动程序。
例子
若要定义 DriverEntry 回调例程,必须先提供一个函数声明,用于标识要定义的回调例程的类型。 Windows 为驱动程序提供一组回调函数类型。 使用回调函数类型声明函数有助于 驱动程序的代码分析、静态驱动程序验证程序(SDV)和其他验证工具查找错误。
若要定义 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调用。 |