设备对象简介

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

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

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

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

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

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

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

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

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

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

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

说明设备对象的示意图。

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