Share via


Deserialisierte NDIS-Miniporttreiber

Alle NDIS 6.0- und höher-Treiber werden deserialisiert.

Ein deserialisierter NDIS-Miniporttreiber serialisiert den Betrieb seiner eigenen MiniportXxx-Funktionen und Warteschlangen intern alle Sendeanforderungen, anstatt sich auf NDIS für die Ausführung dieser Funktionen zu verlassen. Dadurch kann ein deserialisierter Miniporttreiber eine deutlich bessere Vollduplexleistung erzielen als ein serialisierter Miniporttreiber.

Das deserialisierte Treibermodell ist das Standardmodell für NDIS-Miniporttreiber. Verbindungsorientierte Miniporttreiber sowie Miniporttreiber mit WDM-Unterkante müssen deserialisierte Treiber sein. Wenn Sie einen neuen NDIS-Miniporttreiber schreiben, sollten Sie einen deserialisierten Treiber schreiben. Wenn möglich, sollten Sie auch ältere Treiber auf NDIS 6.0 oder höher portieren. Weitere Informationen zum Portieren von Treibern finden Sie unter:

Ein deserialisierter Miniporttreiber muss die folgenden Anforderungen erfüllen, wenn er mit NDIS übergibt:

  • Ein deserialisierter Miniporttreiber muss sich während der Initialisierung als solcher für NDIS identifizieren.

  • Ein deserialisierter Miniporttreiber muss alle Sendeanforderungen asynchron abschließen. Um eine Sendeanforderung abzuschließen, rufen verbindungslose NDIS 6.0- und höher-Miniporttreiber die Funktion NdisMSendNetBufferListsComplete auf. Verbindungsorientierte NDIS 6.0- und höher-Miniporttreiber rufen die Funktion NdisMCoSendNetBufferListsComplete auf.

  • Ein deserialisierter Miniporttreiber, der NDIS 6.0 oder höher unterstützt, legt das Statuselement der NET_BUFFER_LIST-Struktur fest, das an NdisMSendNetBufferListsComplete übergeben wird.

  • Wenn ein deserialisierter Miniporttreiber sendeanforderungen nicht sofort abschließen kann, kann er die Anforderungen nicht zur erneuten Queuing an NDIS zurückgeben. Stattdessen muss der Miniporttreiber Anforderungen intern in die Warteschlange senden, bis genügend Ressourcen zum Übertragen der Daten verfügbar sind.

  • Ein deserialisierter Miniporttreiber darf die Strukturen, die er in Empfangsanzeigen an NDIS übergibt, erst untersuchen, nachdem sie von NDIS zurückgegeben wurden. NDIS gibt NET_BUFFER_LIST Strukturen an die MiniportReturnNetBufferLists-Funktion eines Miniporttreibers zurück.

Ein deserialisierter Miniporttreiber muss die folgenden treiberinternen Anforderungen erfüllen:

  • Ein deserialisierter Miniporttreiber muss seine Netzwerkpufferwarteschlangen mit Spinsperren schützen. Ein deserialisierter Miniporttreiber muss auch seinen freigegebenen Zustand vor dem gleichzeitigen Zugriff durch seine eigenen MiniportXxx-Funktionen schützen.

  • Die MiniportXxx-Funktionen eines deserialisierten Miniporttreibers können unter IRQL <= DISPATCH_LEVEL ausgeführt werden. Daher kann der Treiberschreiber nicht davon ausgehen, dass MiniportXxx-Funktionen in der Reihenfolge aufgerufen werden, in der sie Anforderungen verarbeiten. Eine MiniportXxx-Funktion kann eine andere MiniportXxx-Funktion , die mit einem niedrigeren IRQL ausgeführt wird, vorenthalten.

  • Ein deserialisierter Miniporttreiber ist für die Verwaltung von Netzwerkpufferwarteschlangen verantwortlich. Wenn beim Miniporttreiber ein Ressourcenproblem auftritt, können keine Sendeanforderungen an NDIS zur erneuten Queuing zurückgegeben werden. Stattdessen muss der Miniporttreiber alle Sendeanforderungen intern in die Warteschlange stellen, bis genügend Ressourcen zum Senden der Daten verfügbar sind.

  • Ein deserialisierter Miniporttreiber sollte Sendeanforderungen in der protokollbestimmten Reihenfolge abschließen.

Weitere Informationen zu Sende- und Empfangsanforderungen für NDIS-Treiber finden Sie unter Sende- und Empfangsvorgänge.

Beachten Sie, dass ein deserialisierter Miniporttreiber in der Regel Sendeanforderungen in protokollbestimmter Reihenfolge abschließt. Ein Miniporttreiber, der die Paketpriorität unterstützt (z. B. IEEE 802.1p), kann Sendeanforderungen jedoch basierend auf Prioritätsinformationen neu anordnen.