Ein Gerät kehrt in den Betriebszustand zurück

Ein Gerät, das sich in einem Energiesparmodus befindet, kehrt in den Betriebszustand zurück, wenn einer der folgenden Aktionen auftritt:

  • Das Gerät erkennt ein externes Ereignis und löst ein Aktivierungssignal auf seinem Bus aus. Der Bustreiber, der das Aktivierungssignal erkennt, ruft WdfDeviceIndicateWakeStatus an. Daher ruft das Framework die Rückruffunktion EvtDeviceDisableWakeAtBus des Busfahrers auf.

  • Das Gerät befindet sich im Leerlauf, und ein Treiber ruft WdfDeviceStopIdle auf.

  • Der Energiezustand des Systems hat sich von einem Energiesparzustand in den Betriebszustand (S0) geändert.

In jeder dieser Situationen ruft das Framework die Rückruffunktion EvtDeviceD0Entry des Bustreibers auf, die dann das Gerät (ein untergeordnetes Gerät des Busses) in seinen Betriebszustand (D0) zurückgibt.

Für jeden Funktions- und Filtertreiber, der das Gerät unterstützt, führt das Framework nacheinander die folgenden Schritte durch, beginnend mit dem Treiber, der am niedrigsten im Treiberstapel ist:

  1. Das Framework ruft die EvtDeviceD0Entry-Rückruffunktion des Treibers auf (sofern vorhanden).

  2. Das Framework ruft die EvtInterruptEnable-Rückruffunktion des Treibers (sofern vorhanden) für jeden Interrupt auf und ruft dann die EvtDeviceD0EntryPostInterruptsEnabled-Rückruffunktion des Treibers auf (sofern vorhanden), damit der Treiber Geräteunterbrechungen aktivieren kann.

  3. Wenn die Hardware und der Treiber DMA unterstützen, ruft das Framework die Rückruffunktionen EvtDmaEnablerFill, EvtDmaEnablerEnable und EvtDmaEnablerSelfManagedIoStart des Treibers (sofern vorhanden) für jeden erstellten DMA-Kanal auf.

  4. Wenn der Treiber der Besitzer der Energierichtlinie des Geräts ist, ruft das Framework die Rückruffunktion EvtDeviceDisarmWakeFromS0 oder EvtDeviceDisarmWakeFromSx auf.

  5. Das Framework ruft die Rückruffunktion EvtChildListScanForChildren des Treibers auf (sofern vorhanden).

  6. Das Framework startet alle energieverwalteten E/A-Warteschlangen des Treibers neu und ruft ihre EvtIoResume-Rückruffunktionen auf (falls erforderlich).

  7. Wenn der Treiber selbstverwaltete E/A verwendet, ruft das Framework die Rückruffunktion EvtDeviceSelfManagedIoRestart des Treibers auf.