Рабочее состояние устройства D0
В состоянии питания устройства D0 устройство полностью включено и работает. В этом состоянии драйвер устройства может взаимодействовать с устройством для выполнения операций ввода-вывода, а устройство может создавать прерывания. Если устройство имеет аппаратные регистры, сопоставленные с памятью или адресным пространством ввода-вывода, драйвер может получить доступ к этим регистрам.
Начиная с Windows 8, драйвер устройства может подключить подпрограмму обслуживания прерываний пассивного уровня (ISR) к прерыванию с устройства. Устройство может создавать прерывания независимо от того, находится ли оно в D0. В состоянии Dx с низким энергопотреблением устройство может создать прерывание, которое выступает в качестве триггера для возврата устройства к D0. IsR планируется запустить в IRQL = PASSIVE_LEVEL после того, как устройство перейдет в D0. В более ранних версиях Windows, включая Windows 7, устройство не должно создавать прерывания, если оно находится в состоянии питания устройства, отличном от D0.
Переход с D0 на маломощное состояние Dx может происходить только в том случае, если драйвер устройства, выступая в качестве владельца политики питания для устройства, инициирует переход, вызывая подпрограмму PoRequestPowerIrp . Когда диспетчер питания отвечает на этот вызов, отправляя IRP питания (IRP_MN_SET_POWER), драйвер устройства, драйвер шины и встроенное ПО платформы (через драйвер Windows ACPI, Acpi.sys) совместно обрабатывают этот IRP для изменения состояния питания устройства.
Оборудование устройства обычно отслеживает набор внутренних событий, которые могут генерировать прерывания во время выполнения или сигналы пробуждения в зависимости от того, как устройство настроено. Драйвер реализует один путь кода для реагирования на прерывания, а другой — для реагирования на события пробуждения. Код драйвера можно упростить, если путь к коду прерывания не требует обработки событий пробуждения, а путь к коду пробуждения не должен иметь дело с прерываниями. Рекомендуется настроить устройство на создание прерываний, только если устройство находится в D0, и создавать сигналы пробуждения только в том случае, если устройство находится в состоянии Dx с низким энергопотреблением. Как правило, драйвер настраивает устройство на создание сигнала пробуждения непосредственно перед выходом устройства из D0 и настраивает устройство на создание прерываний сразу после того, как устройство войдет в D0.
Как правило, устройство переходит в состояние D0 при утверждении сигнала сброса оборудования. На самом деле это поведение требуется в спецификациях для автобусов, таких как PCI и PCI Express.
Ниже приведены характеристики состояния D0:
Энергопотребление
Самый высокий уровень непрерывного энергопотребления устройства.
Контекст устройства
Весь контекст сохранен.
Поведение драйвера устройства
Нормальная работа.