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.
Ein Überraschungsaufwachen ist ein unerwarteter Übergang zu D0. Nachdem ein Gerät in den Zustand D3cold wechselt, kann es als Nebeneffekt zu einem überraschenden Aufwachen kommen, wenn der Treiber eines anderen Geräts auf derselben Stromschiene einen Übergang von D3cold zu D0 anfordert. Der Treiber für das erste Gerät muss eine Benachrichtigung über die Überraschungsaktivierung erhalten, um zu verhindern, dass das Gerät in einem nicht initialisierten D0-Zustand verbleibt.
Wenn ein Gerät von D3hot zu D3cold wechselt, ist dies wahrscheinlich der Fall, da die Stromversorgung, die es mit einer Reihe anderer Geräte teilt, deaktiviert wurde. Einige Zeit nachdem diese Geräte D3cold eingegeben haben, fordert der Treiber für eines der Geräte möglicherweise einen Übergang zu D0 an. Als Reaktion auf diese Anforderung aktiviert der übergeordnete Bustreiber oder ACPI-Filtertreiber die Stromversorgung, und alle Geräte, die die Stromversorgung gemeinsam nutzen, nehmen ihre Standard-Hardwarezustände ein.
Der einzige Gerätetreiber, der diese Leistungszustandsänderung erwartet, ist der Treiber, der die Änderung angefordert hat. Die Treiber für die anderen Geräte müssen eine Benachrichtigung über diese Änderung erhalten, damit sie ihre Geräte ordnungsgemäß initialisieren können, um in D0 zu arbeiten. Nur ein Treiber, der diese Benachrichtigung empfangen kann, sollte es dem Gerät ermöglichen, D3cold einzugeben. Andernfalls weiß der Treiber nicht, wann das Gerät D0 eingibt.
Wenn ein Gerät aktiviert ist, wechselt es in einen standardmäßigen, nicht initialisierten Hardwarezustand. Beispielsweise definiert die PCI Express Base 3.0-Spezifikation einen nicht initialisierten D0-Zustand , den ein Gerät eingibt, wenn es zum ersten Mal Strom empfängt. Die Definition dieses Zustands ist spezifisch für PCI- und PCI Express-Geräte, aber Geräte, die mit anderen Bussen verbunden sind, sind so konzipiert, dass ähnliche Hardwarezustände eingegeben werden, wenn sie eingeschaltet sind.
Bei einem PCI- oder PCI Express-Gerät, das mehrere Funktionen implementiert, teilen diese Gerätefunktionen wahrscheinlich die gleiche Stromschiene. Jede Funktion kann jedoch über einen separaten Treiber verfügen, und die Treiber für diese Funktionen sind unwahrscheinlich, dass sie direkt miteinander kommunizieren. Wenn der Treiber für eine dieser Funktionen eine Leistungszustandsänderung von D3cold zu D0 anfordert, erwarten die Treiber für die anderen Funktionen diese Änderung nicht. Wenn diese anderen Funktionen Strom erhalten, müssen ihre Treiber benachrichtigt werden, damit sie die Funktionen so konfigurieren können, dass sie ordnungsgemäß in D0 funktionieren.
Ein Bustreiber erkennt, wann die Stromversorgung zu einem untergeordneten Gerät eingeschaltet wird. Wenn der Funktionstreiber dieses Geräts keinen Übergang zu D0 angefordert hat, fordert der Bustreiber den Gerätetreiber auf, sich selbst einen D0 Power IRP (eine IRP_MN_SET_POWER Anforderung mit Zielzustand = PowerDeviceD0) zu senden, um das Gerät für den Betrieb in D0 zu initialisieren. Ab diesem initialisierten D0-Zustand kann der Gerätetreiber dann den Übergang des Geräts zu D3hot initiieren. Gerätetreiber können Benachrichtigungen über unerwartete Übergänge zu D0 von Bustreibern auf folgende Weise erhalten:
- Gerätetreiber, die sich direkt oder indirekt als Clients des Laufzeit-Power-Management-Frameworks (PoFx) registrieren, erhalten Rückrufbenachrichtigungen.
- Treiber für Geräte, die ihre Geräte für Aufweckvorgänge vorbereiten, sehen ihre ausstehenden IRP_MN_WAIT_WAKE Anfragen durch die Bustreiber abgeschlossen.
Ab Windows 8 kann der Funktionstreiber eines Geräts, der als Besitzer der Energierichtlinie fungiert, sich selbst als Client von PoFx registrieren. Wenn der Bustreiber PoFx benachrichtigt, dass das Gerät einen Überraschungsübergang zu D0 erlebt hat, hilft PoFx dem Gerät, zu einem initialisierten D0-Zustand zu wechseln, und dann zu D3hot. Zunächst ruft PoFx die DevicePowerRequiredCallback-Routine des Treibers auf, um den Gerätetreiber aufzufordern, einen D0-Strom-IRP an den Gerätestapel zu senden. Als Nächstes ruft PoFx die DevicePowerNotRequiredCallback-Routine des Treibers auf, um den Gerätetreiber zu benachrichtigen, dass das Gerät nicht im D0-Zustand verbleiben muss.
Ab Kernel-Mode Driver Framework (KMDF) Version 1.11 kann sich der KMDF-Treiber für ein Einzelkomponentengerät indirekt bei PoFx registrieren, indem die WdfDeviceWdmAssignPowerFrameworkSettings-Methode aufgerufen wird. In diesem Aufruf liefert der Treiber Zeiger auf Rückrufroutinen, die den Treiber über unerwartete Übergänge zu D0 benachrichtigen. Weitere Informationen finden Sie unter Unterstützen von Funktionskraftzuständen.
Ein Treiber, der sein Gerät nicht bei PoFx registriert, kann immer noch über einen Überraschungsübergang zu D0 benachrichtigt werden, wenn das Gerät für das Aufwecken aktiviert ist. Wenn die Bustreiber die Stromversorgung auf das Gerät einschalten, füllen sie die IRP_MN_WAIT_WAKE Anforderung des Fahrers aus. Als Reaktion initialisiert der Treiber sein Gerät für den Betrieb in D0. Das Gerät befindet sich wahrscheinlich im Leerlauf, und in diesem Fall wird der Treiber nach einer gewissen Zeit dieses Gerät in den Zustand D3hot versetzen.
Ein Funktionstreiber, der sich nicht bei PoFx registriert und sein Gerät nicht für das Aufwachen vorbereitet, erhält keine Benachrichtigung über einen unerwarteten Übergang von D3cold zu D0. Das Gerät kann große Zeit in einem nicht initialisierten D0-Zustand verbringen. In diesem Zustand sind alle Komponenten auf dem Gerät in der Regel aktiviert. Um den Stromverbrauch durch Leerlaufgeräte zu reduzieren, sollten Treiber den Eintrag in D3cold nur aktivieren, wenn sie Benachrichtigungen über Überraschungsübergänge zu D0 erhalten können.