设备工作状态 D0
在 D0 设备电源状态下,设备完全打开并正常运行。 在此状态下,设备驱动程序可以与设备交互以执行 I/O 操作,并且设备可以生成中断。 如果设备具有映射到内存或 I/O 地址空间的硬件寄存器,则驱动程序可以访问这些寄存器。
从Windows 8开始,设备驱动程序可以将被动级别中断服务例程 (ISR) 连接到来自设备的中断。 无论设备是否在 D0 中,设备都可以生成中断。 当处于低功率 Dx 状态时,设备可以生成一个中断,该中断充当触发器,使设备返回到 D0。 ISR 计划在设备进入 D0 后在 IRQL = PASSIVE_LEVEL 运行。 在早期版本的 Windows(包括 Windows 7)中,当设备处于 D0 以外的设备电源状态时,不得生成中断。
仅当设备驱动程序作为设备的电源策略所有者通过调用 PoRequestPowerIrp 例程启动转换时,才能从 D0 转换到低功耗 Dx 状态。 当电源管理器通过发送电源 IRP (IRP_MN_SET_POWER) 响应此调用时,设备驱动程序、总线驱动程序和平台固件通过 Windows ACPI 驱动程序 (,Acpi.sys) 协作处理此 IRP 以更改设备的电源状态。
设备硬件通常监视一组内部事件,这些事件可以生成运行时中断或唤醒信号,具体取决于设备的配置方式。 驱动程序实现一个代码路径来响应中断,另一个代码路径用于响应唤醒事件。 如果中断代码路径不需要处理唤醒事件,并且唤醒代码路径不需要处理中断,则可以简化驱动程序代码。 作为最佳做法,驱动程序应将设备配置为仅在设备处于 D0 时生成中断,并且仅在设备处于低功率 Dx 状态时才生成唤醒信号。 通常,驱动程序将设备配置为在设备退出 D0 之前生成唤醒信号,并将设备配置为在设备进入 D0 后生成中断。
通常,设备在断言其硬件重置信号时进入 D0 状态。 事实上,PCI 和 PCI Express 等总线的规范需要此行为。
以下是 D0 状态的特征: