Freigeben über


Energieverwaltung für E/A-Warteschlangen

Wenn das Framework eine E/A-Anforderung empfängt, die an eines der Geräte Ihres Treibers weitergeleitet wird, fügt das Framework die Anforderung in eine E/A-Warteschlange ein. Der Treiber kann E/A-Anforderungen aus der E/A-Warteschlange abrufen, indem Er Anforderungshandler bereitstellt oder die Warteschlange abruft. Weitere Informationen zu E/A-Warteschlangen finden Sie unter Framework Queue Objects.

Beim Entwerfen des Treibers sollten Sie die E/A-Anforderungen gruppieren, die Ihr Treiber in zwei Kategorien erhält:

  1. Anforderungen, die erfordern, dass sich ein Gerät im Arbeitszustand (D0) befindet, einschließlich:

    • Lese- oder Schreibanforderungen, für die der Funktionstreiber des Geräts Daten aus dem Gerät lesen oder in das Gerät schreiben muss.
    • Gerätesteuerung fordert an, dass ein Funktions- oder Bustreiber ohne Zugriff auf das Gerät nicht bedient werden kann.
  2. Anforderungen, für die ein Gerät nicht in den Arbeitszustand (D0) versetzt werden muss, einschließlich:

    • Gerätesteuerung fordert an, dass ein Funktions- oder Bustreiber ohne Zugriff auf das Gerät gewartet werden kann.
    • Möglicherweise alle Anforderungen, die ein Filtertreiber empfängt.
    • Alle Anforderungen, die alle Treiber in einem Treiberstapel empfangen, wenn der Stapel ein Nur-Software-Gerät unterstützt, das nicht mit einer Hardware kommuniziert.

Sofern Sie keinen Filtertreiber oder einen Treiber für einen Stapel schreiben, der nicht mit der Hardware kommuniziert, erhalten Sie wahrscheinlich einige Anforderungen, die erfordern, dass das Gerät in seinem Arbeitszustand ist, zusammen mit einigen, die nicht funktionieren.

Um diese beiden Arten von Anforderungen zu unterstützen, stellt das Framework zwei Arten von E/A-Warteschlangen bereit: diejenigen, die vom Strom verwaltet werden und die nicht. Wenn Ihr Treiber jede E/A-Warteschlange erstellt, legt er das PowerManaged-Element in der WDF_IO_QUEUE_CONFIG Struktur der Warteschlange auf WdfTrue oder WdfFalse fest, um einen der folgenden Anzugeben:

  • Wenn Ihr Treiber PowerManaged auf WdfTrue festlegt, wird die Warteschlange energieverwaltet.

    Wenn E/A-Anforderungen in einer stromverwalteten Warteschlange verfügbar sind, liefert das Framework die Anforderungen nur dann an den Treiber, wenn sich das Gerät im Arbeitszustand (D0) befindet. Daher garantiert das Framework, wenn Ihr Treiber eine Anforderung von einer stromverwalteten Warteschlange empfängt, dass das Gerät verfügbar ist. Wenn sich das Gerät nicht im Arbeitszustand befindet, speichert das Framework Anforderungen in der Warteschlange, bis das Gerät verfügbar ist.

    Wenn sich das Gerät in einem Energiesparzustand befindet, da es sich im Leerlauf befindet und das Framework eine E/A-Anforderung in eine der stromverwalteten Warteschlangen Ihres Treibers einfügt, fordert das Framework den Treiberstapel auf, das Gerät in seinen Arbeitszustand wiederherzustellen, bevor es die Anforderung an Ihren Treiber übermittelt.

    Wenn sich das Gerät in einem Energiesparzustand befindet, da sich das System nicht im Arbeitszustand (S0) befindet und das Framework eine E/A-Anforderung in eine der stromverwalteten Warteschlangen Ihres Treibers einfügt, wartet das Framework, bis das Gerät zum Arbeitszustand (D0) zurückkehrt und dann die Anforderung an Ihren Treiber übermittelt.

    Da das Framework keine E/A-Anforderungen von einer stromverwalteten Warteschlange an den Treiber liefert, wenn sich das Gerät nicht im Arbeitszustand befindet, dürfen Treiber, die sich über dem Besitzer der Energierichtlinie im Treiberstapel befinden, keine powerverwalteten E/A-Warteschlangen verwenden. Wenn ein Treiber, der sich über dem Besitzer der Energierichtlinie befindet, eine stromverwaltete Warteschlange verwendet und sich das Gerät in einem Energiesparzustand befindet, erhält der Treiber die Anforderung nicht und kann sie nicht an den Besitzer der Energierichtlinie übergeben. Daher wird der Besitzer der Energierichtlinie, der den Energiezustand des Geräts steuert, das Gerät nicht reaktivieren.

  • Wenn Ihr Treiber PowerManaged auf WdfFalse festlegt, wird die Warteschlange nicht mit Strom verwaltet.

    Wenn E/A-Anforderungen in einer Warteschlange verfügbar sind, die nicht vom Netz verwaltet wird, übermittelt das Framework die Anforderungen an den Treiber, unabhängig davon, ob sich das Gerät im Arbeitszustand (D0) befindet. Wenn Sie Ihre Warteschlange so eingerichtet haben, dass sie nur Anforderungen empfängt, die keinen Zugriff auf das Gerät erfordern, kann Ihr Treiber jede Anforderung warten, auch wenn das Gerät nicht verfügbar ist.

Weitere Informationen zu powerverwalteten E/A-Warteschlangen finden Sie unter Verwendung von powerverwalteten E/A-Warteschlangen.

Einige Treiber erfordern eine direkte Kontrolle über Plug & Play (PnP) und Energieverwaltungsvorgänge. Diese Treiber können selbstverwaltete E/A-Vorgänge verwenden. Weitere Informationen finden Sie unter Verwenden von selbstverwalteter E/A.