为电源管理设置设备对象标志

在其 AddDevice 例程中,每个驱动程序创建一个设备对象 (筛选设备对象 (DO) 、功能设备对象 (FDO) 或物理设备对象 (PDO) ) ,并在设备对象中设置 DO_XXX 标志来描述设备属性和驱动程序配置。 以下设备对象标志与电源管理相关。

标志 描述
DO_POWER_INRUSH 指示设备首次打开时,设备所吸引的电流激增。 这种激增或“浪涌”持续很短的时间,之后设备所吸引的电流会降至较低的工作水平。
DO_POWER_PAGABLE 指示驱动程序可分页。 从 Windows 2000 开始,可分页的驱动程序必须设置DO_POWER_PAGABLE标志。 电源管理器在 IRQL = PASSIVE_LEVEL 调用此类驱动程序。 有关可分页驱动程序的详细信息,请参阅 使驱动程序可分页

设备对象标志通常在总线驱动程序为设备创建 PDO 时设置。 但是,某些函数驱动程序可能需要更改这些标志的值,作为其 AddDevice 例程的一部分。 从 Windows Vista 开始,操作系统不需要设备堆栈中的所有设备对象都具有相同的电源相关标志集。 但是,在 Windows Server 2003、Windows XP 和 Windows 2000 中,设备堆栈中的所有设备对象都应设置相同的电源相关标志。

从 Windows 2000 开始,分页路径中的设备的驱动程序不得设置DO_POWER_PAGABLE标志。 如果驱动程序参与分页文件的 I/O 操作,则它位于“分页路径”中。 未设置此标志的驱动程序必须可在 IRQL = DISPATCH_LEVEL调用。 有关详细信息,请参阅 Dispatch 例程的约束

通常,驱动程序不应更改DO_POWER_PAGABLE标志的总线驱动程序的值,如果较低级别的驱动程序清除了此标志,则驱动程序不得设置此标志。 在处理涉及 PnP 分页请求 的转换时, (通常响应 具有IRP_MN_DEVICE_USAGE_NOTIFICATION 请求) 的 IRP_MJ_PNP ,存储驱动程序必须仔细排序其设置和清除标志。

启动时需要大功率的设备驱动程序必须在设备对象中设置DO_POWER_INRUSH标志,然后才能清除DO_DEVICE_INITIALIZING标志。 设备堆栈中只有一个驱动程序(通常为 PDO) (总线驱动程序)需要为设备设置DO_POWER_INRUSH标志。 标志通知电源管理器,此类设备必须与其他此类设备一起按顺序启动,以避免电源过载。 电源管理器可确保在任何给定时间系统中的任意位置只有一个电源浪涌 IRP 处于活动状态。

从 Windows Vista 开始,驱动程序可以设置DO_POWER_PAGABLE标志和DO_POWER_INRUSH标志。 在 Windows Server 2003、Windows XP 和 Windows 2000 中,驱动程序不能同时设置DO_POWER_PAGABLE标志和DO_POWER_INRUSH标志。