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.
Wenn ein Treiber eine Warte-/Reaktivierungs-IRP anfordert, muss er eine Rückrufroutine angeben, damit es das Gerät beim Auftreten des Reaktivierungsereignisses an den Arbeitszustand (D0) zurückgeben kann. Nachdem das Wake-up-Ereignis eintritt und alle Treiber das IRP abgeschlossen haben, ruft das System die an PoRequestPowerIrp übergebene Rückrufroutine auf.
Da diese Rückrufroutine im Namen des Treibers festgelegt ist, der das IRP initiiert hat – und nicht für einen Treiber, der das IRP verarbeitet – darf PoStartNextPowerIrp nicht aufgerufen werden; nur die IoCompletion-Routinen, die gesetzt werden, wenn Treiber das IRP die Stapel weiterleiten, sollten das nächste Power-IRP starten. Denken Sie daran, dass der Besitzer der Richtlinie nicht nur das IRP sendet, sondern es auch verarbeitet und daher eine IoCompletion-Routine festgelegt werden kann, wenn er das IRP den Stapel hinunterreicht und dabei zusätzlich eine Rückrufroutine einrichtet, wenn er das Warte-/Wake-IRP anfordert.
Die Rückrufroutine hat die folgenden Verantwortlichkeiten:
Wenn der Treiber mehrere Geräte steuert, bestimmen Sie, welche seiner Geräte das Wake-Up signalisiert haben.
Bearbeiten Sie das Ereignis, das das Wecksignal verursacht hat.
Legen Sie das Gerät fest, das das Wecksignal im D0-Zustand signalisiert hat, indem Sie PoRequestPowerIrp aufrufen, um eine PowerDeviceD0-Anforderung zu senden. Der Treiber muss auch PoSetPowerState aufrufen, um den Power Manager über den Energiezustand des neuen Geräts zu informieren. Weitere Informationen finden Sie unter Senden von IRP_MN_QUERY_POWER oder IRP_MN_SET_POWER für Gerätestromzustände.
Wenn der Treiber eine Cancel-Routine für das IRP festgelegt hat, rufen Sie IoSetCancelRoutine auf, um die Cancel-Routine auf NULL zurückzusetzen.
Wenn der Treiber eine Energierichtlinie für mehr als ein Gerät besitzt, verringern Sie die Anzahl der Warte-/Reaktivierungsreferenzen. Wenn die Anzahl ungleich Null ist, was darauf hinweist, dass ein anderes Gerät zuvor ein Wait/Wake IRP gesendet hatte, fordern Sie ein weiteres Wait/Wake IRP (PoRequestPowerIrp) für seine PDO an.
Ein PCI-Gerät kann beispielsweise sowohl für ein Modem als auch für eine Netzwerkschnittstellenkarte (NIC) die Funktionen Wartemodus/Aufwachen aktiviert haben. Wenn die NIC das System reaktiviert (und damit das IRP abschließt), muss der PCI-FDO ein weiteres Warte-/Wake-IRP an sich selbst senden, damit das Modem weiterhin in der Lage ist, aufzuwachen.
Da der Treiber, der die Leistungsrichtlinie für das Wart-/Weck-IRP angefordert hat, die Leistungsrichtlinie für seinen Gerätestapel steuert, ist er dafür verantwortlich, sein Gerät wieder in den Arbeitszustand zu versetzen, wenn das IRP abgeschlossen ist. Obwohl niedrigere Treiber möglicherweise bereits physische Energie auf das Gerät angewendet haben, muss der Richtlinienbesitzer PoRequestPowerIrp aufrufen, um eine IRP_MN_SET_POWER Anforderung für den Gerätestromzustand D0 zu senden. Erst nachdem alle Treiber im Gerätestapel dieses Power-Up-IRP verarbeitet haben, wird das Gerät in den Arbeitszustand zurückgesendet.