Freigeben über


Abbrechen der NDIS-Benachrichtigung zum selektiven Anhalten im Leerlauf

Wenn der Netzwerkadapter für einen Leerlauftimeout inaktiv wird, startet NDIS den selektiven Anhaltevorgang. Durch diesen Vorgang wird der Netzwerkadapter in einen Energiesparzustand übergehen. NDIS beginnt diesen Vorgang, indem eine Benachrichtigung im Leerlauf an den Miniporttreiber ausgegeben wird. Weitere Informationen zu diesem Vorgang finden Sie unter Behandeln der NDIS-Benachrichtigung zum selektiven Anhalten im Leerlauf.

NDIS ruft die MiniportIdleNotification-Handlerfunktion auf, um den Treiber zu benachrichtigen, dass sich der zugrunde liegende Netzwerkadapter im Leerlauf zu befinden scheint. Nachdem die Leerlaufbenachrichtigung ausgegeben wurde, bricht NDIS eine ausstehende Leerlaufbenachrichtigung ab, wenn mindestens eine der folgenden Bedingungen zutrifft:

NDIS bricht die Leerlaufbenachrichtigung ab, indem die MiniportCancelIdleNotification-Handlerfunktion des zugrunde liegenden Miniporttreibers aufgerufen wird. Wenn diese Funktion aufgerufen wird, muss der Miniporttreiber die Leerlaufbenachrichtigung abschließen, um den Adapter in den Zustand "Full-Power" fortzusetzen. Richtlinien zu diesem Prozess finden Sie unter Abschließen der NDIS-Benachrichtigung zum selektiven Anhalten im Leerlauf.

Weitere Informationen zum Implementieren der MiniportCancelIdleNotification-Handlerfunktion finden Sie unter Implementieren einer MiniportCancelIdleNotification-Handlerfunktion.

Abbrechen der Leerlaufbenachrichtigung aufgrund einer übermäßigen Treiberaktivität

NDIS überwacht Sendeanforderungen und OID-Anforderungen, die an einen Miniporttreiber ausgegeben werden, dessen Netzwerkadapter angehalten wurde und sich in einem Energiesparzustand befindet. In diesem Fall bricht NDIS die ausstehende Leerlaufbenachrichtigung ab, sodass der Netzwerkadapter in den Zustand "Full-Power" fortgesetzt werden kann.

NDIS und der Miniporttreiber führen die folgenden Schritte aus, wenn eine Leerlaufbenachrichtigung abgebrochen wird:

  1. NDIS ruft die MiniportCancelIdleNotification-Handlerfunktion auf, um eine ausstehende Leerlaufbenachrichtigung abzubrechen. Wenn diese Handlerfunktion aufgerufen wird, muss der Miniporttreiber alle busspezifischen E/A-Anforderungspakete (IRPs) abbrechen, die er möglicherweise zuvor für die Leerlaufbenachrichtigung ausgegeben hat.

    Wenn beispielsweise MiniportCancelIdleNotification aufgerufen wird, führt der Miniport für einen USB-Netzwerkadapter die folgenden Schritte aus:

    1. Der Miniporttreiber bricht die ausstehende USB-Leerlaufanforderung (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) ab. Der Miniporttreiber hat diese IRP zuvor an den zugrunde liegenden USB-Bustreiber ausgegeben, als NDIS die MiniportIdleNotification-Funktion des Treibers aufgerufen hat. Der Miniporttreiber bricht diese IRP durch Aufrufen von IoCancelIrp ab.

    2. Wenn der Bustreiber die USB-Idle-Anforderungs-IRP abbricht, ruft er die Abschlussroutine des Miniporttreibers für das IRP auf. Dieser Aufruf benachrichtigt den Treiber, dass das IRP abgeschlossen ist und der Netzwerkadapter in den Zustand "Full-Power" übergehen kann. Aus dem Kontext der Vervollständigungsroutine ruft der Treiber NdisMIdleNotificationComplete auf, um NDIS zu benachrichtigen, dass der Netzwerkadapter in den Zustand "Full-Power" umgestellt werden kann.

    Hinweis Abhängig von den Abhängigkeiten zum Abbrechen busspezifischer Leerlaufanforderungen ruft der Miniporttreiber NdisMIdleNotificationComplete entweder synchron im Kontext des Aufrufs von MiniportCancelIdleNotification oder asynchron nach der Rückgabe von MiniportCancelIdleNotification auf.

    Weitere Informationen zum Implementieren einer IRP-Vervollständigungsroutine für USB-Leerlaufanforderungen finden Sie unter Implementieren einer IRP-Vervollständigungsroutine für USB-Leerlaufanforderungen.

  2. Nachdem der Miniporttreiber busspezifische IRPs für die Leerlaufbenachrichtigung abgebrochen hat, ruft er NdisMIdleNotificationComplete auf. Dieser Aufruf benachrichtigt NDIS, dass die Benachrichtigung im Leerlauf abgeschlossen wurde. NDIS schließt dann den selektiven Angehalten-Vorgang ab, indem der Netzwerkadapter in einen Vollstromzustand übergibt.

    Wenn NdisMIdleNotificationComplete aufgerufen wird, führt NDIS die folgenden Schritte aus:

    1. NDIS-Probleme IRP_MN_SET_POWER an den zugrunde liegenden Bustreiber. Dieses IRP fordert den Bustreiber auf, den Energiezustand des Netzwerkadapters auf PowerDeviceD0 festzulegen.

    2. NDIS gibt eine OID-Set-Anforderung von OID_PNP_SET_POWER an den Miniporttreiber aus. In dieser OID-Anforderung gibt NDIS an, dass der Netzwerkadapter jetzt in den Vollleistungszustand NdisDeviceStateD0 wechselt.

      Wenn diese OID-Set-Anforderung verarbeitet wird, bereitet der Treiber den Adapter für den Vollstrombetrieb vor. Dies schließt die Wiederherstellung der Empfangs- und Sende-Engines in denselben Zustand ein, in dem sie sich vor dem Übergang in den Zustand mit niedriger Leistung befanden. Der Treiber schließt dann die OID-Anforderung mit NDIS_STATUS_SUCCESS ab.

Die folgende Abbildung zeigt die Schritte, die erforderlich sind, wenn NDIS eine Benachrichtigung im Leerlauf abbricht, die an einen Miniporttreiber für einen USB-Netzwerkadapter ausgegeben wurde.

Diagramm, das den Vorgang der Fortsetzung der Benachrichtigung im Leerlauf für einen USB-Netzwerkadapter zeigt.

Abbrechen der Leerlaufbenachrichtigung aufgrund von Aktivierungsereignissen

Bevor der Netzwerkadapter in einen Energiesparzustand übergehen wird, gibt NDIS eine OID-Set-Anforderung von OID_PM_PARAMETERS an den Netzwerkadapter aus. Diese OID-Anforderung gibt die Arten von Aktivierungsereignissen an, die der Adapter signalisieren kann, um den Zustand "Full-Power" fortzusetzen. Für das selektive Anhalten von NDIS ist der Adapter so konfiguriert, dass er jedes der folgenden Aktivierungsereignisse signalisiert:

NDIS und der Miniporttreiber führen die folgenden Schritte aus, wenn NDIS eine Leerlaufbenachrichtigung aufgrund eines vom Netzwerkadapter generierten Aktivierungssignals abbricht:

  1. Der Bustreiber schließt die IRP_MN_WAIT_WAKE ab, die von NDIS ausgegeben wurde, bevor der Adapter in einen Energiesparzustand übergeht. Durch Abschließen des IRP benachrichtigt der Bustreiber NDIS, dass der Netzwerkadapter ein Aktivierungssignal generiert hat.

  2. NDIS ruft die MiniportCancelIdleNotification-Handlerfunktion auf, um den Vorgang zum Abbrechen der Leerlaufbenachrichtigung zu starten. Die Schritte, die an diesem Vorgang beteiligt sind, sind identisch mit denen, die unter Abbrechen der Leerlaufbenachrichtigung aufgrund der Überlastung der Treiberaktivität beschrieben werden.

Die folgende Abbildung zeigt beispielsweise die Schritte, die erforderlich sind, wenn NDIS eine Benachrichtigung im Leerlauf aufgrund eines von einem USB-Netzwerkadapter signalierten Aktivierungsereignisses abbricht.

Diagramm, das den NDIS-Aktivierungsprozess für Benachrichtigungen im Leerlauf für einen USB-Netzwerkadapter zeigt.