Gerätearbeitszustand D0

Im D0-Gerätestromzustand ist das Gerät voll aktiviert und betriebsbereit. In diesem Zustand kann ein Gerätetreiber mit dem Gerät interagieren, um E/A-Vorgänge auszuführen, und das Gerät kann Unterbrechungen generieren. Wenn das Gerät über Hardwareregister verfügt, die dem Arbeitsspeicher oder E/A-Adressraum zugeordnet sind, kann der Treiber auf diese Register zugreifen.

Ab Windows 8 kann ein Gerätetreiber eine Unterbrechungsdienstroutine (ISR) auf passiver Ebene mit dem Interrupt eines Geräts verbinden. Das Gerät kann Interrupts generieren, unabhängig davon, ob es sich in D0 befindet. In einem Dx-Zustand mit geringem Stromverbrauch kann das Gerät einen Interrupt generieren, der als Trigger fungiert, um das Gerät wieder auf D0 zu bringen. Die AUSFÜHRUNG der ISR wird unter IRQL = PASSIVE_LEVEL geplant, nachdem das Gerät D0 eingegeben hat. In früheren Versionen von Windows, einschließlich Windows 7, darf ein Gerät keine Interrupts generieren, wenn es sich in einem anderen Gerätestromzustand als D0 befindet.

Ein Übergang von D0 zu einem Dx-Zustand mit geringem Stromverbrauch kann nur erfolgen, wenn der Gerätetreiber, während er als Besitzer der Energierichtlinie für das Gerät fungiert, den Übergang durch Aufrufen der PoRequestPowerIrp-Routine initiiert. Wenn der Energie-Manager auf diesen Aufruf reagiert, indem er ein Energie-IRP (IRP_MN_SET_POWER) sendet, verarbeiten der Gerätetreiber, der Bustreiber und die Plattformfirmware (über den Windows ACPI-Treiber Acpi.sys) dieses IRP kooperativ, um den Energiezustand des Geräts zu ändern.

Gerätehardware überwacht in der Regel eine Reihe interner Ereignisse, die entweder Laufzeitunterbrechungen oder Aktivierungssignale generieren können, je nachdem, wie das Gerät konfiguriert ist. Der Treiber implementiert einen Codepfad, um auf Unterbrechungen zu reagieren, und einen anderen, um auf Aktivierungsereignisse zu reagieren. Der Treibercode kann vereinfacht werden, wenn der Interruptcodepfad keine Aktivierungsereignisse behandeln muss und der Aktivierungscodepfad keine Interrupts behandeln muss. Als bewährte Methode sollte der Treiber das Gerät so konfigurieren, dass Interrupts nur generiert werden, wenn sich das Gerät in D0 befindet, und nur dann, wenn sich das Gerät im Dx-Zustand mit geringem Stromverbrauch befindet. In der Regel konfiguriert der Treiber das Gerät so, dass ein Aktivierungssignal generiert wird, kurz bevor das Gerät D0 verlässt, und konfiguriert das Gerät so, dass Interrupts direkt nach dem Wechsel des Geräts in D0 generiert werden.

In der Regel wechselt ein Gerät in den D0-Zustand, wenn das Hardwarerücksetzungssignal bestätigt wird. Tatsächlich erfordern die Spezifikationen für Busse wie PCI und PCI Express dieses Verhalten.

Dies sind die Merkmale des D0-Zustands:

Stromverbrauch
Höchster kontinuierlicher Stromverbrauch für das Gerät.

Gerätekontext
Der gesamte Kontext wird beibehalten.

Gerätetreiberverhalten
Normaler Betrieb.

Wiederherstellungszeit
Nicht zutreffend

Aktivierungsfunktion
Nicht zutreffend