DriverEntry 的必要责任

DriverEntry 例程所需的有序职责如下所示:

  1. 为驱动程序的标准例程提供入口点。

    驱动程序将许多标准例程的入口点存储在驱动程序对象或驱动程序扩展中。 此类入口点包括驱动程序的 AddDevice 例程、调度例程、 StartIo 例程和 卸载 例程的入口点。 例如,驱动程序会使用如下语句为其 AddDeviceDispatchPnPDispatchPower 例程设置入口点 (Xxx 是供应商提供的标识驱动程序) 前缀的占位符:

        :
    DriverObject->DriverExtension->AddDevice = XxxAddDevice;
    DriverObject->MajorFunction[IRP_MJ_PNP] = XxxDispatchPnp;
    DriverObject->MajorFunction[IRP_MJ_POWER] = XxxDispatchPower;
        :
    

    其他标准例程(如 ISR 或 IoCompletion 例程)是通过调用系统支持例程指定的。 有关详细信息,请参阅各个 标准驱动程序例程的说明。

  2. 创建和/或初始化驱动程序使用的各种驱动程序范围对象、类型或资源。 请注意,大多数标准例程基于每个设备使用对象,因此驱动程序应在其 AddDevice 例程中或在收到 IRP_MN_START_DEVICE 请求后设置此类对象。

    如果驱动程序具有设备专用线程或等待任何内核定义的调度程序对象, DriverEntry 例程可能会初始化 内核调度程序对象。 (根据驱动程序如何使用对象 () ,它可能会改为在其 AddDevice 例程中或在收到 IRP_MN_START_DEVICE 请求后执行此任务。)

  3. 释放已分配且不再需要的任何内存。

  4. 返回 NTSTATUS,指示驱动程序是否已成功加载,并且可以接受和处理来自 PnP 管理器的请求,以配置、添加和启动其设备。 (请参阅 DriverEntry 返回值。)