Freigeben über


IWDFDevice2::StopIdle-Methode (wudfddi.h)

[Warnung: UMDF 2 ist die neueste Version von UMDF und ersetzt UMDF 1. Alle neuen UMDF-Treiber sollten mit UMDF 2 geschrieben werden. UMDF 1 werden keine neuen Features hinzugefügt, und die Unterstützung für UMDF 1 in neueren Versionen von Windows 10 ist eingeschränkt. Universelle Windows-Treiber müssen UMDF 2 verwenden. Weitere Informationen finden Sie unter Erste Schritte mit UMDF.]

Die StopIdle-Methode informiert das Framework darüber, dass das Gerät in den Betriebszustand (D0) versetzt werden muss.

Syntax

HRESULT StopIdle(
  [in] BOOL WaitForD0
);

Parameter

[in] WaitForD0

Ein boolescher Wert, der angibt, wann StopIdle zurückgegeben wird. Bei TRUE wird erst zurückgegeben, nachdem das angegebene Gerät in den D0 Gerätestromzustand wechselt. Wenn FALSE, gibt die Methode sofort zurück.

Rückgabewert

StopIdle gibt S_OK zurück, wenn der Vorgang erfolgreich ist. Andernfalls gibt die Methode möglicherweise einen der folgenden Werte zurück:

Rückgabecode Beschreibung
HRESULT_FROM_NT(STATUS_INVALID_DEVICE_REQUEST)
Der aufrufende Treiber ist nicht der Besitzer der Energierichtlinie des Geräts.
HRESULT_FROM_NT(STATUS_PENDING)
Das Gerät hat bereits seinen Arbeitszustand zurückgegeben.
HRESULT_FROM_NT(STATUS_POWER_STATE_INVALID)
Es ist ein Gerätefehler aufgetreten, und das Gerät kann nicht in den D0-Energiezustand gelangen.
 

Diese Methode gibt möglicherweise einen der anderen Werte zurück, die Winerror.h enthält.

Hinweise

Wenn Ihr Gerät im Leerlauf in einen Energiesparzustand versetzt werden kann, muss Ihr Treiber möglicherweise gelegentlich StopIdle aufrufen, um das Gerät wieder in den Betriebszustand (D0) zu versetzen oder zu verhindern, dass es in einen Energiesparzustand wechselt.

Ihr Treiber muss StopIdle nicht aufrufen, wenn sich ein Gerät im Leerlauf befindet und das Framework eine E/A-Anforderung in der energieverwalteten E/A-Warteschlange des Geräts platziert. Darüber hinaus muss Ihr Treiber stopIdle nicht aufrufen, wenn sich ein Gerät im Leerlauf befindet und ein Aktivierungssignal erkennt. In beiden Fällen fordert das Framework den Bustreiber auf, den Energiezustand des Geräts auf D0 wiederherzustellen.

Obwohl Treiber stopIdle in der Regel nicht aufrufen müssen, wenn sie E/A-Anforderungen verarbeiten, die sie aus einer energieverwalteten E/A-Warteschlange erhalten, ist der Anruf zulässig. Treiber dürfen den WaitForD0-Parameter jedoch nicht auf TRUE festlegen, wenn E/A-Anforderungen von einer energieverwalteten E/A-Warteschlange verarbeitet werden.

Ihr Treiber muss StopIdle aufrufen, wenn er aufgrund einer Anforderung, die der Treiber außerhalb einer energieverwalteten E/A-Warteschlange empfangen hat, auf das Gerät zugreifen muss. Ihr Treiber kann beispielsweise eine vom Treiber definierte Schnittstelle oder eine WMI-Anforderung unterstützen, die den Zugriff auf das Gerät erfordert. In diesem Fall müssen Sie sicherstellen, dass sich das Gerät in seinem Arbeitszustand befindet, bevor der Treiber auf das Gerät zugreift, und dass das Gerät in seinem Betriebszustand verbleibt, bis der Treiber auf das Gerät zugegriffen hat.

Durch den Aufruf von StopIdle wird das Gerät in den Betriebszustand (D0) versetzt, wenn sich das System im Arbeitszustand (S0) befindet. Das Gerät bleibt im Betriebszustand, bis der Treiber IWDFDevice2::ResumeIdle aufruft. An diesem Punkt kann das Framework das Gerät in einen Energiesparmodus versetzen, wenn es im Leerlauf bleibt.

Rufen Sie StopIdle nicht auf, bevor das Framework die IPnpCallback::OnD0Entry-Rückrufmethode des Treibers zum ersten Mal aufgerufen hat.

Ein Aufruf von StopIdle kann nur dann den Betriebszustand eines Geräts im Leerlauf wiederherstellen, wenn sich das System im Betriebszustand (S0) befindet. Wenn das System in einen Low-Power-Zustand wechselt, wenn ein Treiber StopIdle aufruft, wobei der WaitForD0-Parameter auf TRUE festgelegt ist, wird die Funktion erst zurückgegeben, wenn das System in den S0-Zustand zurückkehrt.

Jedem Aufruf von StopIdle muss schließlich ein Aufruf von ResumeIdle folgen, andernfalls kehrt das Gerät nie wieder in einen Energiesparzustand zurück, wenn es wieder in den Leerlauf wechselt. Aufrufe von StopIdle können geschachtelt werden, sodass die Anzahl der Aufrufe von ResumeIdle gleich der Anzahl der Aufrufe an StopIdle sein muss.

Weitere Informationen zu StopIdle und ResumeIdle finden Sie unter Unterstützen von idle Power-Down in UMDF-basierten Treibern.

Beispiele

Im folgenden Codebeispiel wird die IWDFDevice2-Schnittstelle abgerufen und dann StopIdle aufgerufen. StopIdle wird zurückgegeben, nachdem das Gerät in den D0 Gerätestromzustand wechselt.

    IWDFDevice2 *pIWDFDevice2 = NULL;
    HRESULT hr;

    //
    // Get a pointer to the IWDFDevice2 interface.
    //
    hr = pIWDFDevice->QueryInterface(__uuidof(IWDFDevice2),
                                     (void**) &pIWDFDevice2);
    if (SUCCEEDED(hr)) 
    {
        hr = pIWDFDevice2->StopIdle(TRUE);
    }
...
   SAFE_RELEASE(pIWDFDevice2);

Anforderungen

Anforderung Wert
Ende des Supports In UMDF 2.0 und höher nicht verfügbar.
Zielplattform Desktop
UMDF-Mindestversion 1.9
Kopfzeile wudfddi.h (include Wudfddi.h)
DLL WUDFx.dll

Weitere Informationen

IWDFDevice2

IWDFDevice2::ResumeIdle