Freigeben über


Initialisieren virtueller Miniports

Ein Zwischentreiber initialisiert seine virtuellen Miniports, nachdem er erfolgreich einen zugrunde liegenden Miniportadapter geöffnet hat und bereit ist, Anforderungen zu akzeptieren und an seine virtuellen Miniports zu senden. Ein Zwischentreiber ruft NdisIMInitializeDeviceInstanceEx einmal oder mehrmals über seine ProtocolBindAdapterEx-Funktion auf, um die Initialisierung eines oder mehrerer virtueller Miniports anzufordern.

Hinweis Ein Zwischentreiber ist nicht erforderlich, um NdisIMInitializeDeviceInstanceEx aufzurufen, wenn ein zugrunde liegender Miniportadapter geöffnet wird. Es muss keine 1:1-Beziehung zwischen virtuellen Miniports und offenen Adaptern bestehen.

Legen Sie den DriverInstance-Parameter von NdisIMInitializeDeviceInstanceEx auf den Gerätenamen für den virtuellen Miniport fest, der initialisiert wird. Der Zwischentreiber ruft den Gerätenamen aus dem Registrierungsschlüssel UpperBindings ab.

Für einen n-zu-1-MUX-Zwischentreiber, der mehrere virtuelle Miniports über eine einzelne physische NIC übergibt, muss für jeden virtuellen Miniport ein Gerätename vorhanden sein. Der MUX-Zwischentreiber erfordert ein Notify-Objekt, das die Liste der Namen virtueller Miniportgeräte verwaltet. Der empfohlene Speicherort für die Liste ist der Registrierungsschlüssel UpperBindings . In diesem Fall ist der Registrierungsschlüssel UpperBindings ein MULTI_SZ Eintrag, der die Liste der Gerätenamen enthält. Der MUX-Zwischentreiber ruft NdisIMInitializeDeviceInstanceEx einmal für jeden Gerätenamen auf, der in der Gerätenamenliste angegeben ist.

Der Aufruf von NdisIMInitializeDeviceInstanceEx führt zu einem Aufruf der MiniportInitializeEx-Funktion des Zwischentreibers, um die Initialisierung des angegebenen virtuellen Miniports durchzuführen, sofern NDIS einen IRP_MN_START_DEVICE empfängt, um das Gerät zu starten. Wenn NDIS keinen solchen IRP empfängt, ruft NDIS die MiniportInitializeEx-Funktion des Zwischentreibers nicht auf. Der Aufruf von MiniportInitializeEx kann zu einem späteren Zeitpunkt erfolgen und befindet sich daher nicht unbedingt im Kontext des Aufrufs von NdisIMInitializeDeviceInstanceEx. Wenn NDIS niemals MiniportInitializeEx für den virtuellen Miniport aufruft, auf den in einem Aufruf von NdisIMInitializeDeviceInstanceEx verwiesen wird, und der zwischengeschaltete Treiber den virtuellen Miniport nicht mehr benötigt, sollte der Zwischentreiber NdisIMCancelInitializeDeviceInstance aufrufen, um die Initialisierung des virtuellen Miniports abzubrechen. Angenommen, ein Zwischentreiber erstellt einen virtuellen Miniport als Reaktion auf eine erfolgreiche Bindung an einen zugrunde liegenden Miniport. Wenn diese Bindung entfernt wird, bevor NDIS MiniportInitializeEx aufruft, sollte der Zwischentreiber NdisIMCancelInitializeDeviceInstance aufrufen, um die Initialisierung des Miniports abzubrechen.

MiniportInitializeEx muss einen virtual-miniportspezifischen Kontextbereich zuordnen und initialisieren. Weitere Informationen zum Angeben des Kontextbereichs finden Sie unter Initialisieren eines virtuellen Miniports.

Ein Zwischentreiber muss als deserialisierter Treiber ausgeführt werden. Weitere Informationen zu deserialisierten Treibern finden Sie unter Deserialisierte NDIS-Miniporttreiber.

Ein Zwischentreiber sollte überprüfen, ob die verwalteten Zustandsinformationen ordnungsgemäß initialisiert sind. Wenn der Treiber sendebezogene Ressourcen erfordert (z. B. neue NET_BUFFER_LIST Strukturen für Netzwerkdaten, die MiniportSendNetBufferLists an die nächstniedrige Ebene übertragen wird), kann der NET_BUFFER_LIST-Strukturpool zu diesem Zeitpunkt zugeordnet werden.