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调用。

另请参阅

DRIVER_OBJECT