DRIVER_INITIALIZE回调函数 (wdm.h)

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> 的访问权限,该数据库指向一个计数 Unicode 字符串,该字符串指定注册表的 \Registry\Machine\Hardware 树的路径。

RegistryPath 指向的注册表路径字符串的格式为 \Registry\Machine\System\CurrentControlSet\Services\DriverName。 驱动程序可以使用此路径来存储特定于驱动程序的信息;请参阅 驱动程序的注册表项DriverEntry 例程应保存 Unicode 字符串的副本,而不是指针,因为 I/O 管理器在 DriverEntry 返回后释放 RegistryPath 缓冲区。

有关实现 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 调用。

另请参阅

DRIVER_OBJECT