PoRegisterDeviceForIdleDetection-Funktion (ntifs.h)

Die PoRegisterDeviceForIdleDetection-Routine aktiviert oder abbricht die Leerlauferkennung und legt Werte für das Leerlauftimeout 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 in Kraft ist.

[in] PerformanceIdleTime

Legt den Timeoutwert (in Sekunden) fest, der angewendet wird, wenn die Systemenergierichtlinie für die Leistung optimiert wird. Geben Sie null an, um die Erkennung im Leerlauf zu deaktivieren, wenn die Leistungsrichtlinie in Kraft ist.

[in] State

Gibt den Energiezustand des Geräts an, der 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. Er gibt NULL zurück, um anzugeben, dass die Leerlauferkennung deaktiviert wurde, dass ein Leerlaufzähler nicht zugeordnet werden konnte oder dass einer oder beide Timeoutwerte ungültig waren.

Hinweise

PoRegisterDeviceForIdleDetection ermöglicht Es Treibern, den vom Power Manager bereitgestellten Mechanismus zur Erkennung von Leerlauf zu verwenden. Treiber rufen PoRegisterDeviceForIdleDetection aus einem der folgenden Gründe auf:

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

Nachdem ein Gerät für die Leerlauferkennung aktiviert wurde, ruft ein Treiber PoSetDeviceBusy auf, wenn das Gerät verwendet wird, und übergibt den von PoRegisterDeviceForIdleDetection zurückgegebenen Leerlaufzeiger ungleich NULL. Beim Aufrufen von PoSetDeviceBusy wird der Countdown im Leerlauf neu gestartet. Beachten Sie, dass ein Treiber keinen NULL-Zeiger an PoSetDeviceBusy übergeben darf.

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

PoRegisterDeviceForIdleDetection legt Timeoutwerte sowohl für die Erhaltung als auch für die Leistung fest. Der ConservationIdleTime-Wert wird angewendet, wenn die Systemenergierichtlinie für die Erhaltung optimiert wird. Der Wert PerformanceIdleTime wird angewendet, wenn die Systemleistungsrichtlinie für die Leistung optimiert wird. In der Regel hängt die anwendbare Richtlinie von der Stromquelle ab: Wenn das System mit Wechselstrom ausgeführt wird, optimiert das System die Leistung, und wenn der Akku ausfällt, optimiert das System für die Erhaltung.

Bestimmte Geräte können Timeoutwerte von -1 angeben, um die Standardtimeouts der Energierichtlinie für ihre Geräteklasse zu verwenden. Die Standardtimeoutwerte ermöglichen 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 gibt NULL zurück, wenn -1 für ein Gerät eines nicht unterstützten Typs angegeben ist. 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 Idle-Erkennungswerte.

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
Unterstützte Mindestversion (Client) Windows 2000
Zielplattform Universell
Header ntifs.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Weitere Informationen

IRP

IRP_MN_SET_POWER

PoSetDeviceBusy