Asynchrone E/A- und Vervollständigungsfunktionen in Netzwerktreibern
Latenz ist bei einigen Netzwerkvorgängen inhärent. Aufgrund dieser Latenz sind viele der Funktionen des oberen Edges, die von einem Miniporttreiber bereitgestellt werden, und die Unteren Edgefunktionen eines Protokolltreibers so konzipiert, dass sie den asynchronen Betrieb unterstützen. Anstatt CPU-Zyklen zu verschwenden, die in einer Schleife warten, um eine zeitaufwendige Aufgabe abzuschließen oder ein Hardwareereignis zu signalisieren, verlassen sich Netzwerktreiber auf die Fähigkeit, die meisten Vorgänge asynchron zu verarbeiten.
Asynchrone Netzwerk-E/A-Vorgänge werden mithilfe einer Vervollständigungsfunktion unterstützt. Das folgende Beispiel veranschaulicht die Verwendung einer Vervollständigungsfunktion für einen Netzwerksendevorgang , aber dieser Mechanismus ist für viele andere Vorgänge vorhanden, die von einem Protokoll- oder Miniporttreiber ausgeführt werden.
Wenn ein Protokolltreiber NDIS aufruft, um ein Paket zu senden, was zu einem Aufruf der MiniportSendNetBufferLists-Funktion des Miniporttreibers führt, kann der Miniporttreiber versuchen, diese Anforderung sofort auszuführen und als Ergebnis einen entsprechenden status Wert zurückzugeben. Bei synchronen Vorgängen werden die möglichen Antworten für den erfolgreichen Abschluss des Sendens, NDIS_STATUS_RESOURCES und NDIS_STATUS_FAILURE NDIS_STATUS_SUCCESS, die auf einen Fehler irgendeiner Art hinweisen.
Der Abschluss eines Sendevorgangs kann jedoch einige Zeit dauern, während der Miniporttreiber (oder NDIS) das Paket in die Warteschlange stellt und wartet, bis die NIC das Ergebnis des Sendevorgangs anzeigt. Die MiniportSendNetBufferLists-Funktion miniportSendNetBufferLists kann diesen Vorgang asynchron verarbeiten, indem ein status Wert von NDIS_STATUS_PENDING zurückgegeben wird. Wenn der Miniporttreiber den Sendevorgang abgeschlossen hat, ruft er die Vervollständigungsfunktion NdisMSendNetBufferListsComplete auf und übergibt einen Zeiger auf den gesendeten Paketdeskriptor. Diese Informationen werden an den Protokolltreiber übergeben und signalisieren die Vervollständigung.
Die meisten Treibervorgänge, die einen längeren Zeitraum erfordern können, unterstützen asynchrone Vorgänge mit einer ähnlichen Vervollständigungsfunktion. Solche Funktionen haben Namen der Form NdisMXxxComplete.
Vervollständigungsfunktionen werden auch für folgendes bereitgestellt:
Festlegen und Abfragen der Konfiguration.
Hardware zurücksetzen.
Geben Sie status an.
Geben Sie empfangene Daten an.
Übertragen sie empfangene Daten.