Udostępnij przez


Inicjowanie wirtualnych miniportów

Sterownik pośredni inicjuje swoje wirtualne miniporty po pomyślnym otwarciu podstawowego adaptera miniportu i jest gotowy do akceptowania żądań oraz wysyłania na swoich wirtualnych miniportach. Sterownik pośredni wywołuje NdisIMInitializeDeviceInstanceEx z swojej funkcji ProtocolBindAdapterEx jeden lub więcej razy w celu zainicjowania jednego lub więcej miniportu wirtualnego.

Uwaga Sterownik pośredni nie musi wywoływać NdisIMInitializeDeviceInstanceEx po otwarciu podstawowego adaptera miniportu. Nie musi istnieć relacja jeden do jednego między wirtualnymi miniportami a otwartymi adapterami.

Ustaw parametr DriverInstanceNdisIMInitializeDeviceInstanceEx na nazwę urządzenia dla zainicjowanego miniportu wirtualnego. Sterownik pośredni uzyskuje nazwę urządzenia z klucza rejestru UpperBindings.

W przypadku sterownika pośredniego MUX n-to-one, który nakłada wiele wirtualnych miniportów na jedną fizyczną kartę sieciową, musi istnieć nazwa urządzenia dla każdego wirtualnego miniportu. Sterownik pośredni MUX wymaga obiektu powiadamiania, który utrzymuje listę nazw urządzeń wirtualnych miniportów. Zalecaną lokalizacją dla zamieszczenia listy jest klucz rejestru UpperBindings. W tym przypadku klucz rejestru UpperBindings jest wpisem MULTI_SZ zawierającym listę nazw urządzeń. Sterownik pośredniczący MUX wywołuje NdisIMInitializeDeviceInstanceEx raz dla każdej nazwy urządzenia określonej na liście nazw urządzeń.

Wywołanie NdisIMInitializeDeviceInstanceEx powoduje wywołanie MiniportInitializeEx w celu przeprowadzenia inicjowania określonego miniportu wirtualnego, pod warunkiem że usługa NDIS odbiera IRP_MN_START_DEVICE, aby uruchomić urządzenie. Jeśli usługa NDIS nie otrzyma takiego protokołu IRP, usługa NDIS nie wywoła funkcji MiniportInitializeEx sterownika pośredniego. Wywołanie MiniportInitializeEx może nastąpić w późniejszym czasie i dlatego nie musi znajdować się w kontekście wywołania NdisIMInitializeDeviceInstanceEx. Jeśli usługa NDIS nigdy nie wywołuje MiniportInitializeEx dla wirtualnego miniportu, na które wskazuje wywołanie NdisIMInitializeDeviceInstanceEx, a sterownik pośredni nie potrzebuje już wirtualnego miniportu, sterownik pośredni powinien wywołać NdisIMCancelInitializeDeviceInstance, aby anulować proces inicjowania wirtualnego miniportu. Załóżmy na przykład, że sterownik pośredni tworzy wirtualny miniport w odpowiedzi na pomyślne powiązanie z bazowym miniportem. Jeśli to powiązanie zostanie usunięte przed wywołaniem przez NDIS funkcji MiniportInitializeEx, sterownik pośredni powinien wywołać NdisIMCancelInitializeDeviceInstance, aby anulować inicjowanie miniportu.

MiniportInitializeEx musi przydzielić i zainicjować obszar kontekstu specyficzny dla miniportu wirtualnego. Aby uzyskać więcej informacji na temat określania obszaru kontekstu, zobacz Inicjowanie wirtualnego miniportu.

Sterownik pośredni musi działać jako sterownik deserializowany. Aby uzyskać więcej informacji na temat deserializowanych sterowników, zobacz Deserializowane sterowniki miniportu NDIS.

Kierowca pośredni powinien sprawdzić, czy przechowywane informacje o stanie są poprawnie zainicjalizowane. Jeśli sterownik wymaga zasobów związanych z wysyłaniem — na przykład nowych struktur NET_BUFFER_LIST dla danych sieciowych, które MiniportSendNetBufferLists przekaże do następnej niższej warstwy — w tym momencie można przydzielić pulę struktur NET_BUFFER_LIST.