DriverEntry 的必要责任

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

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

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

        :
    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 Return Values.)