Übersicht über das selektive Anhalten von NDIS
Ab NDIS 6.30 ermöglicht die selektive NDIS-Schnittstelle zum Anhalten eines Netzwerkadapters im Leerlauf, indem der Adapter in einen Energiesparzustand übergehen. Dadurch kann das System den CPU- und Leistungsaufwand des Adapters reduzieren.
Das selektive Anhalten von NDIS ist besonders nützlich für Netzwerkadapter, die auf der USB v1.1- und v2.0-Schnittstelle basieren. Diese Adapter werden kontinuierlich nach empfangenen Paketen abgefragt, unabhängig davon, ob sie aktiv oder im Leerlauf sind. Durch angehaltene USB-Adapter im Leerlauf kann der CPU-Mehraufwand um bis zu 10 Prozent reduziert werden.
Das selektive Anhalten von NDIS basiert auf der USB-Technologie für selektives Anhalten . Das selektive Anhalten von NDIS ist jedoch busunabhängig. Auf diese Weise werden busunabhängige E/A-Anforderungspakete (IRPs) zum selektiven Anhalten von NDIS ausgegeben. Dadurch ist der Miniporttreiber für die Ausgabe aller IRPs verantwortlich, die für das selektive Anhalten eines bestimmten Busses erforderlich sind. Beispielsweise geben Miniporttreiber für USB-Netzwerkadapter die busspezifische USB-Idle Request-IRP (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) während eines selektiven Anhaltevorgangs an den USB-Bustreiber aus.
NDIS und der Miniporttreiber nehmen auf folgende Weise am selektiven Anhalten von NDIS teil:
Wenn ein Miniporttreiber seine Unterstützung für das selektive Anhalten von NDIS registriert hat, überwacht NDIS die E/A-Aktivität des Netzwerkadapters. E/A-Aktivitäten umfassen Empfangspaketanzeigen, Sendepaketvervollständigungen und OID-Anforderungen, die vom Miniporttreiber verarbeitet werden.
NDIS betrachtet den Netzwerkadapter als im Leerlauf, wenn er länger als einen angegebenen Leerlauftimeoutzeitraum inaktiv war. In diesem Fall startet NDIS einen selektiven Anhaltevorgang, indem eine Leerlaufbenachrichtigung an den Miniporttreiber ausgegeben wird, um den Netzwerkadapter in einen Energiesparzustand zu versetzen.
Hinweis
Die Länge des Leerlauftimeoutzeitraums wird durch den Wert des standardisierten INF-Schlüsselwort (keyword) *SSIdleTimeout angegeben. Weitere Informationen zu diesem Schlüsselwort (keyword) finden Sie unter Standardisierte INF-Schlüsselwörter für das selektive Anhalten von NDIS.
Weitere Informationen dazu, wie NDIS ermittelt, dass sich ein Netzwerkadapter im Leerlauf befindet, finden Sie unter How NDIS Detects Idle Network Adapters.For more information how NDIS determine that a network adapter is im leerlauf.
NDIS gibt die Leerlaufbenachrichtigung an den Miniporttreiber aus, indem die MiniportIdleNotification-Handlerfunktion des Treibers aufgerufen wird. Wenn diese Funktion aufgerufen wird, bestimmt der Miniporttreiber, ob der Netzwerkadapter in einen Energiesparzustand übergehen kann. Der Miniporttreiber führt diese Bestimmung busspezifisch durch.
Beispielsweise bestimmt ein USB-Miniporttreiber, ob der Netzwerkadapter in einen Energiesparzustand wechseln kann, indem er eine USB-Idle Request-IRP (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) an den zugrunde liegenden USB-Bustreiber ausgibt. Dadurch wird der Bustreiber darüber informiert, dass sich der Netzwerkadapter im Leerlauf befindet, und bestätigt, ob der Adapter in einen Energiesparzustand umgestellt werden kann.
Hinweis
Der Miniporttreiber muss eine Rückruf- und Vervollständigungsroutine für die USB-Idle-Anforderungs-IRP angeben.
Weitere Informationen dazu, wie ein Miniporttreiber eine Benachrichtigung im Leerlauf verarbeitet, finden Sie unter Behandeln der NDIS-Benachrichtigung zum selektiven Anhalten im Leerlauf.
Nachdem der Miniporttreiber bestätigt hat, dass der Netzwerkadapter in einen Energiesparzustand wechseln kann, ruft er NdisMIdleNotificationConfirm auf. In diesem Aufruf gibt der Miniporttreiber den niedrigsten Leistungszustand an, in den der Netzwerkadapter wechseln kann.
Wenn NdisMIdleNotificationConfirm aufgerufen wird, gibt NDIS OID-Anforderungen an den Miniporttreiber aus, um den Adapter für den Übergang in einen Energiesparzustand vorzubereiten. NDIS gibt auch IRPs an den zugrunde liegenden Bustreiber aus, um den Adapter auf einen Low-Power-Zustand festzulegen.
Nachdem der Netzwerkadapter angehalten wurde, verbleibt er in einem Energiesparzustand, bis die ausstehende Leerlaufbenachrichtigung abgebrochen wird.
NDIS bricht die ausstehende Leerlaufbenachrichtigung ab, indem die MiniportCancelIdleNotification-Handlerfunktion des Miniport-Treibers aufgerufen wird. NDIS ruft diese Handlerfunktion auf, wenn mindestens eine der folgenden Bedingungen zutrifft:
NDIS erkennt Sendepaketanforderungen oder OID-Anforderungen, die an den Miniporttreiber von überlastenden Protokoll- oder Filtertreibern ausgegeben werden.
Der Netzwerkadapter signalisiert ein Aktivierungsereignis. Dies kann auftreten, wenn der Adapter ein Paket empfängt oder eine Änderung der Medienverbindung status erkennt.
Nachdem der Netzwerkadapter angehalten wurde, kann der Miniporttreiber auch die Leerlaufbenachrichtigung abschließen, um den Adapter in den Zustand "Full-Power" fortzusetzen. Die Gründe hierfür sind spezifisch für das Design und die Anforderungen des Treibers und adapters.
Weitere Informationen dazu, wie NDIS die Leerlaufbenachrichtigung abbricht, finden Sie unter Abbrechen der NDIS-Benachrichtigung zum selektiven Anhalten im Leerlauf.
Weitere Informationen dazu, wie der Miniporttreiber die Leerlaufbenachrichtigung abschließt, finden Sie unter Abschließen der NDIS-Benachrichtigung zum selektiven Anhalten im Leerlauf.
Wenn die MiniportCancelIdleNotification-Handlerfunktion aufgerufen wird, bestimmt der Miniporttreiber, ob der Netzwerkadapter in den Zustand "Full-Power" fortgesetzt werden kann. Der Treiber bricht auch alle busspezifischen IRPs ab, die er möglicherweise zuvor für die Leerlaufbenachrichtigung ausgegeben hat.
Die Bestimmung, dass der Netzwerkadapter in einen Vollleistungszustand übergehen kann, ist busspezifisch. Wenn beispielsweise MiniportCancelIdleNotification aufgerufen wird, muss der USB-Miniport die zuvor ausgestellte USB-Idle-Anforderungs-IRP abbrechen. Sobald der USB-Treiber die IRP abgebrochen hat, ruft er die Abschlussroutine des IRP auf, um zu bestätigen, dass das IRP abgebrochen wurde und der Netzwerkadapter in den Zustand "Full-Power" fortgesetzt werden kann. Im Kontext der Vervollständigungsroutine ruft der Miniporttreiber NdisMIdleNotificationComplete auf.
Wenn der Miniport feststellt, dass der Netzwerkadapter in den Zustand "Full-Power" fortgesetzt werden kann, ruft er NdisMIdleNotificationComplete auf. Dieser Aufruf benachrichtigt NDIS, dass die Benachrichtigung im Leerlauf abgeschlossen wurde. NDIS fährt dann mit dem Abschluss des selektiven Angehalten-Vorgangs fort, indem der Netzwerkadapter in einen Vollstromzustand übergeht.
Wenn NdisMIdleNotificationComplete aufgerufen wird, gibt NDIS OID-Anforderungen an den Miniporttreiber aus, um den Adapter für den Übergang in einen Vollleistungszustand vorzubereiten. NDIS gibt auch IRPs an den zugrunde liegenden Bustreiber aus, um den Adapter auf einen Vollleistungszustand festzulegen.
Wenn der Netzwerkadapter in den Zustand "Full-Power" fortgesetzt wird, wird der selektive Anhaltevorgang abgeschlossen. NDIS setzt die Überwachung der E/A-Aktivität des Netzwerkadapters fort. Wenn der Adapter nach einem anderen Leerlauftimeout inaktiv wird, gibt NDIS eine Leerlaufbenachrichtigung an den Miniporttreiber aus, um den Netzwerkadapter anzusetzen.