驱动程序对象简介

I/O 管理器为已安装和加载的每个驱动程序创建驱动程序 对象 。 驱动程序对象是使用 DRIVER_OBJECT 结构定义的。

当 I/O 管理器调用驱动程序的 DriverEntry 例程时,它会提供驱动程序的驱动程序对象的地址。 驱动程序对象包含用于许多驱动程序标准例程的入口点的存储。 驱动程序负责填写这些入口点。

下图演示了一个驱动程序对象,其中包含最低级别和更高级别的驱动程序可以或必须具有的一组系统定义的标准例程。

名称旁带有星号的每个标准例程接收 I/O 请求数据包, (IRP) 作为输入。 其中每个标准例程还接收指向 I/O 请求的目标设备对象的指针。

说明驱动程序对象的示意图。

I/O 管理器定义驱动程序对象类型,并使用驱动程序对象注册和跟踪有关加载的驱动程序映像的信息。 请注意,驱动程序对象中的调度入口点 (DDDispatchXxxDDDispatchYyy) 对应于在 I/O 堆栈位置中传递的主要函数代码 (IRP_MJ_XXX) 。

I/O 管理器首先将每个 IRP 路由到驱动程序提供的调度例程。 最低级别驱动程序的调度例程通常调用 I/O 支持例程 (IoStartPacket) 将 (排队或传递) 对驱动程序的 StartIo 例程具有有效参数的每个 IRP。 StartIo 例程在特定设备上启动请求的 I/O 操作。 较高级别的驱动程序通常没有 StartIo 例程,但它们可以。