Miniport-Treiber
Ein NDIS Miniport-Treiber hat zwei grundlegende Funktionen:
Verwaltung einer Netzwerkschnittstellenkarte (NIC), einschließlich Senden und Empfangen von Daten über die NIC.
Schnittstelle zu übergeordneten Treibern, wie z. B. Filtertreibern, Zwischentreibern und Protokolltreibern.
Ein Miniport-Treiber kommuniziert mit seinen NICs und mit übergeordneten Treibern über die NDIS-Bibliothek. Die NDIS-Bibliothek exportiert eine vollständige Reihe von Funktionen (NdisMXxx und andere NdisXxx Funktionen), die alle Betriebssystemfunktionen kapseln, die ein Miniport-Treiber aufrufen muss. Der Miniport-Treiber muss seinerseits eine Reihe von Einstiegspunkten (MiniportXxx-Funktionen) exportieren, die NDIS für seine eigenen Zwecke oder im Namen von übergeordneten Treibern aufruft, um auf den Miniport-Treiber zuzugreifen.
Hinweis
Weitere Informationen über den NDIS-Treiber-Stack und ein Diagramm, das die Beziehung zwischen allen vier NDIS-Treiber-Typen zeigt, finden Sie unter NDIS-Treiber-Stack.
Die folgenden Sende- und Empfangsvorgänge veranschaulichen die Interaktion von Miniport-Treibern mit NDIS und mit übergeordneten Treibern:
Wenn ein Transporttreiber ein Paket zu übertragen hat, ruft er eine NdisXxx-Funktion auf, die von der NDIS-Bibliothek exportiert wird. NDIS gibt das Paket dann an den Miniport-Treiber weiter, indem er die entsprechende MiniportXxx Funktion aufruft, die vom Miniport-Treiber exportiert wird. Der Miniport-Treiber leitet dann das Paket zur Übertragung an die NIC weiter, indem er die entsprechenden NdisXxx-Funktionen aufruft.
Wenn ein NIC ein Paket empfängt, das an ihn selbst adressiert ist, kann er einen Hardware-Interrupt buchen, der von NDIS oder dem Miniport-Treiber des NIC verarbeitet wird. NDIS benachrichtigt den Miniport-Treiber der NIC, indem es die entsprechende MiniportXxx Funktion aufruft. Der Miniport-Treiber richtet die Übertragung der Daten von der NIC ein und meldet dann das Vorhandensein des empfangenen Pakets an gebundene übergeordnete Treiber, indem er die entsprechende NdisXxx-Funktion aufruft.
Verbindungslose und verbindungsorientierte Miniport-Treiber
NDIS unterstützt Miniport-Treiber sowohl für verbindungslose Umgebungen als auch für verbindungsorientierte Umgebungen.
Verbindungslose Miniport-Treiber steuern NICs für verbindungslose Netzwerkmedien, wie z. B. Ethernet. Verbindungslose Miniport-Treiber werden weiter unterteilt in deserialisierte und serialisierte Treiber:
Hinweis Alle NDIS 6.0 und spätere Treiber sind deserialisiert.
Deserialisierte Treiber serialisieren den Vorgang ihrer eigenen MiniportXxx Funktionen und stellen alle eingehenden Sendepakete intern in eine Warteschlange. Dies führt zu einer deutlich besseren Vollduplex-Leistung, vorausgesetzt, dass die kritischen Abschnitte des Treibers (Code, der jeweils nur von einem einzigen Thread ausgeführt werden kann) klein gehalten werden.
Serialisierte Treiber verlassen sich auf NDIS, um Aufrufe an ihre MiniportXxx Funktionen zu serialisieren und ihre Warteschlangen zu verwalten.
Verbindungsorientierte Miniport-Treiber steuern NICs für verbindungsorientierte Networking-Medien, wie z. B. ISDN. Verbindungsorientierte Miniport-Treiber sind immer deserialisiert – sie serialisieren immer den Vorgang ihrer eigenen MiniportXxx-Funktionen und stellen alle eingehenden Pakete intern in eine Warteschlange.
Ein NDIS-Miniport-Treiber kann eine nicht-NDIS-bezogene untere Edge haben (siehe folgende Abbildung).
Ein Miniport-Treiber verwendet über seine nicht-NDIS-untere Edge die Klassenschnittstelle für einen Bus, wie z. B. den Universal Serial Bus (USB), um ein Gerät am Bus zu steuern. Der Miniport-Treiber kommuniziert mit dem Gerät, indem er E/A Request-Pakete (IRPs) entweder an den Bus oder direkt an remote Geräte sendet, die an den Bus angeschlossen sind. An seiner oberen Edge stellt der Miniport-Treiber eine standardmäßige NDIS-Miniport-Treiberschnittstelle zur Verfügung, über die der Miniport-Treiber mit darüber liegenden NDIS-Treibern kommunizieren kann.