Freigeben über


PoRegisterDeviceForIdleDetection-Funktion (ntifs.h)

Die PoRegisterDeviceForIdleDetection- Routine aktiviert oder abbricht die Leerlauferkennung und legt Leerlauftimeoutwerte für ein Gerät fest.

Syntax

PULONG PoRegisterDeviceForIdleDetection(
  [in] PDEVICE_OBJECT     DeviceObject,
  [in] ULONG              ConservationIdleTime,
  [in] ULONG              PerformanceIdleTime,
  [in] DEVICE_POWER_STATE State
);

Parameter

[in] DeviceObject

Ein Zeiger auf die vom Treiber erstellte DEVICE_OBJECT für das Gerät. Dieser Parameter kann auf ein physisches Geräteobjekt (PDO) oder ein funktionales Geräteobjekt (FDO) verweisen.

[in] ConservationIdleTime

Legt den Timeoutwert (in Sekunden) fest, der angewendet werden soll, wenn die Energierichtlinie des Systems für die Energieeinsparung optimiert wird. Geben Sie null an, um die Leerlauferkennung zu deaktivieren, wenn die Erhaltungsrichtlinie wirksam ist.

[in] PerformanceIdleTime

Legt den Timeoutwert (in Sekunden) fest, der angewendet werden soll, wenn die Systemleistungsrichtlinie für die Leistung optimiert wird. Geben Sie null an, um die Leerlauferkennung zu deaktivieren, wenn die Leistungsrichtlinie wirksam ist.

[in] State

Gibt den Gerätestromzustand an, in einer IRP_MN_SET_POWER Anforderung angefordert werden soll, wenn ConservationIdleTime- oder PerformanceIdleTime- erfüllt wurde. Mögliche Werte sind die DEVICE_POWER_STATE Werte.

Rückgabewert

PoRegisterDeviceForIdleDetection gibt einen Zeiger auf den Leerlaufzähler zurück, um anzugeben, dass die Leerlauferkennung aktiviert wurde. Es wird NULL zurückgegeben, um anzugeben, dass die Leerlauferkennung deaktiviert wurde, dass ein Leerlaufzähler nicht zugeordnet werden konnte oder dass mindestens ein Timeoutwert ungültig war.

Bemerkungen

PoRegisterDeviceForIdleDetection- ermöglicht Treibern die Verwendung des vom Power Managerbereitgestellten Leerlauferkennungsmechanismus. Treiber rufen PoRegisterDeviceForIdleDetection aus folgenden Gründen auf:

  • Um die Leerlauferkennung für das Gerät zu aktivieren und anfängliche Leerlauftimeoutwerte festzulegen.
  • So ändern Sie die Leerlauftimeoutwerte für ein Gerät.
  • So deaktivieren Sie die Leerlauferkennung für ein Gerät.

Nach dem Aktivieren eines Geräts für die Leerlauferkennung ruft ein Treiber PoSetDeviceBusy auf, wenn das Gerät verwendet wird, und übergibt den nicht NULL-Leerlaufzeiger, der von PoRegisterDeviceForIdleDetectionzurückgegeben wird. Das Aufrufen PoSetDeviceBusy startet den Leerlauf-Countdown neu. Beachten Sie, dass ein Treiber keinen NULL-Zeiger an PoSetDeviceBusy-übergeben darf.

Wenn das Gerät den aktuellen Leerlauftimeoutwert erfüllt, sendet der Power Manager eine IRP_MN_SET_POWER Anforderung an den Anfang des Gerätestapels, wobei der Geräte-Energiezustand Stateangegeben wird. Als Reaktion auf die IRP-führt jeder Treiber alle gerätespezifischen Aufgaben aus, die vor dem Stromzustandsübergang erforderlich sind, und übergibt dann das IRP an den nächsten niedrigeren Treiber. Wenn der IRP den Bustreiber erreicht, legt dieser Treiber das Gerät in den angeforderten niedrigeren Leistungszustand und schließt das IRP ab.

PoRegisterDeviceForIdleDetection- legt Timeoutwerte sowohl für die Erhaltung als auch für die Leistung fest. Der wert ConservationIdleTime gilt, wenn die Systemstromrichtlinie für die Erhaltung optimiert wird; der wert PerformanceIdleTime gilt, wenn die Systemleistungsrichtlinie für die Leistung optimiert wird. In der Regel hängt die entsprechende Richtlinie von der Stromquelle ab: Wenn das System mit Netzstrom ausgeführt wird, optimiert das System die Leistung, und wenn der Akkubetrieb ausgeschaltet wird, optimiert das System die Erhaltung.

Bestimmte Geräte können Timeoutwerte von -1 angeben, um die Standardzeitüberschreitungen für die Energierichtlinie für ihre Geräteklasse zu verwenden. Die Standardtimeoutwerte bieten eine bessere Systemintegration für unterstützte Standardgeräteklassen. Derzeit unterstützt WDM dieses Feature für Geräte vom Typ FILE_DEVICE_DISK und FILE_DEVICE_MASS_STORAGE. PoRegisterDeviceForIdleDetection NULL zurück, wenn -1 für ein Gerät eines nicht unterstützten Typs angegeben wird. Informationen zu Gerätetypen finden Sie unter Angeben von Gerätetypen.

Pro Gerät kann nur eine Leerlauferkennung festgelegt werden. Nachfolgende Aufrufe von PoRegisterDeviceForIdleDetection ändern die Leerlauferkennungswerte.

Wenn sowohl ConservationIdleTime- als auch PerformanceIdleTime- null sind, bricht diese Routine die gesamte Leerlauferkennung für das Gerät ab und gibt NULL zurück.

PoRegisterDeviceForIdleDetection- kann einen Treiber von der Notwendigkeit befreien, eine eigene Leerlauferkennung durchzuführen. Treiber können jedoch auch ihre eigene Leerlauferkennung implementieren.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 2000
Zielplattform- Universal
Header- ntifs.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- <= APC_LEVEL

Siehe auch

IRP-

IRP_MN_SET_POWER

PoSetDeviceBusy