设备对象简介

操作系统按 设备对象表示设备。 一个或多个设备对象与每个设备相关联。 设备对象充当设备上的所有操作的目标。

内核模式驱动程序必须为每个设备至少创建一个设备对象,但有以下例外:

  • 具有关联类或端口驱动程序的微型驱动程序不必创建自己的设备对象。 类或端口驱动程序创建设备对象,并将操作调度到微型驱动程序。

  • 属于设备类型特定的子系统(如 NDIS 微型端口驱动程序)的驱动程序具有由子系统创建的设备对象。

请参阅特定设备类型的文档,以确定驱动程序是否创建自己的设备对象。

某些设备对象不表示物理设备。 仅软件驱动程序,用于处理 I/O 请求,但不将这些请求传递给硬件,仍必须创建一个设备对象来表示其操作的目标。

有关驱动程序如何创建设备对象的详细信息,请参阅 创建设备对象

设备通常由多个设备对象表示,一个用于处理设备的 I/O 请求的驱动程序堆栈中的每个驱动程序。 设备的设备对象组织到 设备堆栈中。 每当在设备上执行操作时,系统都会将 IRP 数据结构传递给设备堆栈中顶部设备对象的驱动程序。 每个驱动程序都处理 IRP,或将其传递给与设备堆栈中的下一个设备对象关联的驱动程序。 有关设备堆栈的详细信息,请参阅 示例 WDM 设备堆栈。 有关 IRP 的详细信息,请参阅 处理 IRP

设备对象由由对象管理器管理的 DEVICE_OBJECT 结构表示。 对象管理器为其他系统对象提供的设备对象相同的功能。 具体而言,可以命名设备对象,命名设备对象可以打开句柄。 有关命名设备对象的详细信息,请参阅 命名设备对象

系统为每个设备对象提供专用存储,称为设备扩展,驱动程序可用于特定于设备的存储。 设备扩展由系统与设备对象一起创建和释放。 有关详细信息,请参阅 设备扩展

下图说明了设备对象与 I/O 管理器之间的关系。

diagram illustrating a device object.

该图显示了驱动程序编写器感兴趣的 DEVICE_OBJECT 结构的成员。 有关这些成员的详细信息,请参阅 创建设备对象初始化设备对象和设备 对象的属性