Share via


Abschließen der NDIS-Benachrichtigung zum selektiven Anhalten des Leerlaufs

NDIS ruft die MiniportIdleNotification-Handlerfunktion auf, um den Treiber zu benachrichtigen, dass sich der zugrunde liegende Netzwerkadapter im Leerlauf zu befinden scheint. Weitere Informationen zu diesem Vorgang finden Sie unter Behandeln der NDIS-Benachrichtigung zum selektiven Anhalten des Leerlaufs.

Nachdem die Leerlaufbenachrichtigung ausgegeben wurde, schließt der Miniporttreiber die Benachrichtigung zum selektiven Anhalten des Leerlaufs von NDIS unter den folgenden Bedingungen aus:

  • NDIS bricht die Leerlaufbenachrichtigung ab, indem die MiniportCancelIdleNotification-Handlerfunktion des zugrunde liegenden Miniporttreibers aufgerufen wird.

  • Der Miniporttreiber schließt die Leerlaufbenachrichtigung selbst ab. Die Gründe hierfür sind spezifisch für das Design und die Anforderungen des Treibers und Adapters. Beispielsweise könnte der Treiber die Leerlaufbenachrichtigung abschließen, wenn er empfangsaktivität auf dem Netzwerkadapter erkennt.

Hinweis Der Miniporttreiber kann die Leerlaufbenachrichtigung nicht explizit abbrechen. Wenn NDIS die Leerlaufbenachrichtigung abbricht, muss der Miniporttreiber die Benachrichtigung wie in diesem Thema beschrieben abschließen. Weitere Informationen finden Sie unter Abbrechen der NDIS-Benachrichtigung zum selektiven Anhalten des Leerlaufs.

In beiden Fällen muss der Miniporttreiber die Leerlaufbenachrichtigung abschließen, um den Adapter in den Zustand "Full-Power" fortzusetzen. Um die Leerlaufbenachrichtigung abzuschließen, muss der Miniporttreiber alle busspezifischen E/A-Anforderungspakete (IRPs) abbrechen, die er möglicherweise zuvor für die Leerlaufbenachrichtigung ausgegeben hat. Schließlich ruft der Treiber NdisMIdleNotificationComplete auf, um NDIS zu benachrichtigen, dass der Netzwerkadapter in den Zustand "Full-Power" umgewandelt werden kann.

Der Miniporttreiber für einen USB-Netzwerkadapter schließt beispielsweise eine Leerlaufbenachrichtigung ab, indem er die folgenden Schritte ausführt:

  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 Request-IRP abbricht, ruft er die Vervollständigungsroutine des Miniporttreibers für den IRP auf. Dieser Aufruf benachrichtigt den Treiber, dass der IRP abgeschlossen ist und der Netzwerkadapter in einen Vollstromzustand übergehen kann. Aus dem Kontext der Vervollständigungsroutine ruft der Treiber NdisMIdleNotificationComplete auf, um NDIS darüber zu informieren, dass der Netzwerkadapter in einen Vollstromzustand übergestellt werden kann.

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

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.

Nachdem der Miniporttreiber alle busspezifischen 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 überstellt wird.

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

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

  2. NDIS stellt eine OID-Set-Anforderung (Object Identifier) OID_PNP_SET_POWER an den Miniporttreiber aus. In dieser OID-Anforderung gibt NDIS an, dass der Netzwerkadapter jetzt in den Zustand NdisDeviceStateD0 mit voller Leistung überwechselt.

    Wenn er diese Anforderung für den OID-Satz verarbeitet, bereitet der Treiber den Adapter für den Betrieb mit voller Energie vor. Dies schließt das Wiederherstellen der Empfangs- und Sendemodule in den zustand ein, in dem sie sich vor dem Übergang zum 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 der Miniporttreiber eine Leerlaufbenachrichtigung für einen USB-Netzwerkadapter ausführt.

Diagramm, das die Schritte veranschaulicht, die beim Ausfüllen einer Leerlaufbenachrichtigung für einen USB-Netzwerkadapter erforderlich sind.

Hinweis Wenn der Miniporttreiber eine Leerlaufbenachrichtigung abschließt, darf er nicht NdisMIdleNotificationConfirm für eine Leerlaufbenachrichtigung aufrufen, die zuvor über einen Aufruf von NdisMIdleNotificationComplete abgeschlossen wurde.