Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
[Gilt für KMDF- und UMDF]-
Die WdfDeviceStopIdle--Methode informiert das Framework, dass das angegebene Gerät in den Betriebszustand (D0) versetzt werden muss.
Syntax
NTSTATUS WdfDeviceStopIdle(
_In_ WDFDEVICE Device,
_In_ BOOLEAN WaitForD0
);
Die Parameter
[in] Device
Ein Handle zu einem Framework-Geräteobjekt.
[in] WaitForD0
Ein boolescher Wert, der angibt, wann WdfDeviceStopIdle zurückgegeben wird. Wenn TRUE-, wird sie erst zurückgegeben, nachdem das angegebene Gerät den D0-Gerätestromzustand eingegeben hat. Wenn FALSE-, wird die Methode sofort zurückgegeben.
Rückgabewert
Nichts
Bemerkungen
Dieses Makro kann die folgenden Werte zurückgeben:
| Rückgabewert | Bedeutung |
|---|---|
| STATUS_PENDING | Das Gerät wird asynchron eingeschaltet. |
| STATUS_INVALID_DEVICE_STATE | Der Treiber ist nicht der Besitzer der Energierichtlinie für das Gerät. |
| STATUS_POWER_STATE_INVALID | Ein Geräteausfall ist aufgetreten, und das Gerät kann seinen D0-Energiezustand nicht eingeben. |
Die Methode gibt möglicherweise andere NTSTATUS-Werte zurück.
Hinweis
Für Geräte, die SystemManagedIdleTimeout oder SystemManagedIdleTimeoutWithHint in der WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE-Aufzählung angeben, beim Aufrufen von WdfDeviceStopIdle mit WaitForD0 auf FALSEfestgelegt ist, wenn das Gerät sich noch in D0 befindet und der Leerlauf-Timeoutzeitraum noch nicht abgelaufen ist, beginnend mit WDF-Versionen 1.33/2.33, WdfDeviceStopIdle gibt STATUS_SUCCESS zurück (in früheren Versionen hat dies zu einem Rückgabewert von STATUS_PENDING geführt).
Wenn der Treiber ein ungültiges Objekthandle bereitstellt, tritt eine Fehlerüberprüfung auf.
Wenn Ihr Gerät in den Leerlaufmodus wechselt, muss ihr Treiber möglicherweise gelegentlich WdfDeviceStopIdle- aufrufen, um das Gerät wieder in den Arbeitszustand (D0) zu versetzen oder zu verhindern, dass es in einen Energiesparmodus wechselt.
WdfDeviceStopIdle- verhindert nicht, dass das Framework das Gerät in einen Ruhezustand überführt, wenn das System in einen Sx-Energiesparmodus wechselt. Der einzige Effekt besteht darin, Übergänge zu Dx-Ruhezustand zu verhindern, während sich das System im Arbeitszustand S0 befindet. Wenn das Gerät gerichtete Energieverwaltungunterstützt, verhindert WdfDeviceStopIdle- nicht, dass das Gerät die richtungsgesteuerte Stromversorgung eingibt.
Warnung
Rufen Sie WdfDeviceStopIdle- nicht mit WaitForD0 = TRUE- während der Stromversorgung direkt oder indirekt auf. Wenn beispielsweise der EvtDeviceArmWakeFromS0 Rückruf auf einen anderen Thread wartet, der WdfDeviceStopIdle(TRUE)aufruft, wird der Stromübergang blockiert und das System stürzt ab.
Ihr Treiber muss nichtWdfDeviceStopIdle- aufrufen, wenn ein Gerät im Leerlauf ist und das Framework eine E/A-Anforderung in der E/A-Warteschlange des Geräts platziert. Darüber hinaus muss ihr Treiber nicht WdfDeviceStopIdle aufrufen, wenn ein Gerät im Leerlauf ist und ein Wake-Signal erkennt. In beiden Fällen fordert das Framework den Bustreiber auf, den Energiezustand des Geräts auf D0 wiederherzustellen.
Obwohl Treiber in der Regel nicht WdfDeviceStopIdle- aufrufen müssen, wenn sie E/A-Anforderungen verarbeiten, die sie aus einer powerverwalteten E/A-Warteschlange abrufen, ist der Anruf zulässig. Treiber dürfen jedoch nicht den WaitForD0 Parameter auf TRUE- festlegen, wenn E/A-Anforderungen aus einer powerverwalteten E/A-Warteschlange verarbeitet werden.
Ihr Treiber mussWdfDeviceStopIdle- aufrufen, wenn er aufgrund einer Anforderung auf das Gerät zugreifen muss, dass der Treiber außerhalb einer stromverwalteten E/A-Warteschlange empfangen wurde. Ihr Treiber unterstützt z. B. eine treiberdefinierte Schnittstelle oder eine WMI-Anforderung, die auf das Gerät zugreifen muss. 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 Arbeitszustand bleibt, bis der Treiber den Zugriff auf das Gerät abgeschlossen hat.
Durch aufrufen WdfDeviceStopIdle erzwingt das Gerät in den Arbeitszustand (D0), wenn sich das System im Arbeitszustand (S0) befindet. Das Gerät verbleibt in seinem Arbeitszustand, bis der Treiber WdfDeviceResumeIdle-aufruft. An diesem Punkt kann das Framework das Gerät in einen Energiesparzustand versetzen, wenn es im Leerlauf bleibt.
Rufen Sie WdfDeviceStopIdle- nicht auf, bevor das Framework die EvtDeviceD0Entry Rückruffunktion aufgerufen hat.
Ein Aufruf von WdfDeviceStopIdle- kann ein Leerlaufgerät nur dann in den Arbeitszustand wiederherstellen, wenn sich das System im Arbeitszustand (S0) befindet. Wenn das System in einen Energiesparzustand wechselt oder das Gerät bereits als Reaktion auf Sx (wobei x > 0) heruntergefahren wurde, wenn ein Treiber WdfDeviceStopIdle aufruft, wobei der parameter WaitForD0 auf TRUEfestgelegt ist, wird die Funktion erst zurückgegeben, wenn das System zum S0-Zustand zurückkehrt. Wenn das Gerät gerichtete Energieverwaltungunterstützt und das Energiesubsystem einen gerichteten Stromabstrom initiiert hat, wird ein Aufruf von WdfDeviceStopIdle mit dem parameter WaitForD0 auf TRUEfestgelegt, erst zurückgegeben, nachdem das Energiesubsystem das Gerät an die Stromversorgung weitergeleitet hat.
Jedem erfolgreichen Aufruf von WdfDeviceStopIdle- muss schließlich ein Aufruf von WdfDeviceResumeIdlefolgen. Andernfalls wird das Gerät nie wieder in einen Energiesparzustand zurück, wenn es erneut im Leerlauf wird. Aufrufe an WdfDeviceStopIdle können geschachtelt werden, sodass die Anzahl der Aufrufe an WdfDeviceResumeIdle der Anzahl der Aufrufe an WdfDeviceStopIdleentsprechen muss. Rufen Sie WdfDeviceResumeIdle- nicht auf, wenn ein Aufruf von WdfDeviceStopIdle fehlschlägt.
Wenn das System nach WdfDeviceStopIdle- in einen Energiesparzustand wechselt, wechselt das Gerät ebenfalls in einen Energiesparzustand. Wenn das System zum Arbeitszustand (S0) zurückkehrt, kehrt das Gerät auch zum Arbeitszustand (D0) zurück. Der Energieverweis vom Aufruf an WdfDeviceStopIdle bleibt aktiv und verhindert, dass das Gerät einen Energiesparzustand eingibt, bis ein übereinstimmender Aufruf an WdfDeviceResumeIdlevorhanden ist.
Weitere Informationen finden Sie unter Unterstützen von Power-Down-im Leerlauf.
Wenn WaitForD0TRUEist, muss WdfDeviceStopIdle bei IRQL = PASSIVE_LEVEL aufgerufen werden. Wenn WaitForD0FALSEist, muss diese Methode bei IRQL-<= DISPATCH_LEVEL aufgerufen werden.
Das Aufrufen WdfDeviceStopIdleWithTag anstelle von WdfDeviceStopIdle bietet zusätzliche Informationen (Tagwert, Zeilennummer und Dateiname), die Sie in Microsoft-Debuggern anzeigen können.
Beispiele
Im folgenden Codebeispiel gibt WdfDeviceStopIdle- zurück, nachdem das angegebene Gerät den D0-Geräte-Energiezustand eingegeben hat.
NTSTATUS status;
status = WdfDeviceStopIdle(Device, TRUE);
Anforderungen
| Anforderung | Wert |
|---|---|
| Zielplattform | universell |
| Minimale KMDF-Version | 1.0 |
| Mindest-UMDF-Version | 2.0 |
| Kopfzeile | wdfdevice.h (einschließen Wdf.h) |
| Bibliothek | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
| IRQL | Siehe Abschnitt "Hinweise". |
| DDI-Complianceregeln | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |