Aufrufen von PoStartNextPowerIrp

Ab Windows Vista ist das Aufrufen von PoStartNextPowerIrp nicht erforderlich, und ein Aufruf dieser Routine führt keinen Energieverwaltungsvorgang aus. In Windows Server 2003, Windows XP und Windows 2000 muss der Treiber jedoch poStartNextPowerIrp aufrufen, nachdem ein Treiber eine Abfrageleistungs-IRP oder ein Set-Power-IRP verarbeitet hat, um den Energie-Manager zu benachrichtigen, dass er bereit ist, eine weitere Energie-IRP zu erhalten. Treiber müssen PoStartNextPowerIrp aufrufen, während der IRP-Stapelspeicherort auf den aktuellen Treiber und vor dem Aufrufen von PoCallDriver verweist.

Ein Treiber muss diese Routine einmal für jede IRP_MN_QUERY_POWER - oder IRP_MN_SET_POWER-Anforderung aufrufen, die er empfängt. Treiber müssen PoStartNextPowerIrp nicht aufrufen, wenn sie IRP_MN_WAIT_WAKE - oder IRP_MN_POWER_SEQUENCE-Anforderungen verarbeiten.

Wenn ein Treiber PoStartNextPowerIrp aufruft, muss der aktuelle IRP-Stapelspeicherort auf den aktuellen Treiber verweisen. In der Regel erfolgt dieser Aufruf am besten aus einer IoCompletion-Routine . PoStartNextPowerIrp muss vor IoCompleteRequest, IoSkipCurrentIrpStackLocation und PoCallDriver aufgerufen werden. Das Aufrufen der Routinen in der anderen Reihenfolge kann zu einem System-Deadlock führen.

Selbst wenn ein Treiber die IRP ausfällt, muss er dennoch PoStartNextPowerIrp aufrufen, um den Energie-Manager darüber zu informieren, dass er bereit ist, eine andere Energie-IRP zu verarbeiten.

In den folgenden Abschnitten wird erläutert, wann jeder Treibertyp diese Routine aufrufen soll:

Aufrufen von PoStartNextPowerIrp über einen Filtertreiber

Aufrufen von PoStartNextPowerIrp von einem Besitzer der Geräte-Energierichtlinie

Aufrufen von PoStartNextPowerIrp über einen Bustreiber