Udostępnij za pośrednictwem


Inicjowanie sterownika pośredniego

Sterownik pośredni NDIS rejestruje funkcje MiniportXxx oraz funkcje ProtocolXxx w trakcie procedury DriverEntry. Aby zarejestrować funkcje MiniportXxx, sterownik pośredni musi wywołać funkcję NdisMRegisterMiniportDriver z ustawioną flagą NDIS_INTERMEDIATE_DRIVER. Ta flaga znajduje się w strukturze NDIS_MINIPORT_DRIVER_CHARACTERISTICS, którą sterownik przekazuje w MiniportDriverCharacteristics. Aby zarejestrować funkcje ProtocolXxx, sterownik pośredni musi wywołać funkcję NdisRegisterProtocolDriver.

DriverEntry zwraca STATUS_SUCCESS lub równoważną NDIS_STATUS_SUCCESS, jeśli sterownik został pomyślnie zarejestrowany jako sterownik pośredni NDIS. Jeśli inicjowanie DriverEntry zakończy się niepowodzeniem, propagując stan błędu zwrócony przez funkcję NdisXxx lub przez procedurę obsługi trybu jądra, sterownik nie pozostanie załadowany. DriverEntry musi być wykonywana synchronicznie; oznacza to, że nie może zwrócić STATUS_PENDING ani równoważnej NDIS_STATUS_PENDING.

Aby zarejestrować sterownik pośredni w usłudze NDIS, procedura DriverEntry musi co najmniej:

  • Wywołaj funkcję NdisMRegisterMiniportDriver z ustawioną flagą NDIS_INTERMEDIATE_DRIVER w celu zarejestrowania funkcji MiniportXxx sterownika.
  • Wywołaj funkcję NdisRegisterProtocolDriver, aby zarejestrować funkcje ProtocolXxx sterownika, jeśli sterownik następnie wiąże się z bazowym sterownikiem NDIS.
  • Wywołaj funkcję NdisIMAssociateMiniport, aby poinformować NDIS o połączeniu między wyższą warstwą miniportu sterownika a niższą warstwą protokołu.

Jeśli wystąpi błąd w DriverEntry po pomyślnym zakończeniu NdisMRegisterMiniportDriver, sterownik musi wywołać funkcję NdisMDeregisterMiniportDriver przed zakończeniem działania DriverEntry. Jeśli DriverEntry zakończy się sukcesem, sterownik musi wywołać NdisMDeregisterMiniportDriver w swojej funkcji MiniportDriverUnload.

Sterowniki pośrednie mają większość DriverEntry wymagania sterowników protokołów i sterowników miniportu.

Inicjowanie wirtualnego miniportu sterownika pośredniego występuje, gdy sterownik wywołuje funkcję NdisIMInitializeDeviceInstanceEx z funkcji ProtocolBindAdapterEx.

Usługa NDIS wywołuje funkcję ProtocolBindAdapterEx po zainicjowaniu wszystkich podstawowych sterowników miniportu.

W rezultacie, funkcja DriverEntry sterownika pośredniego NDIS może zignorować wskaźnik RegistryPath po jego przekazaniu do NdisMRegisterMiniportDriver. Taki sterownik może również zignorować wskaźnik DriverObject po przekazaniu go do NdisMRegisterMiniportDriver. Jednak sterownik powinien zapisać wartość dojścia sterownika miniportu zwróconą przez NdisMRegisterMiniportDriver w NdisMiniportDriverHandle i wartość uchwytu protokołu zwróconą przez NdisRegisterProtocolDriver w NdisProtocolHandle dla kolejnych wywołań funkcji NdisXxx. Funkcja sterownika pośredniego ProtocolBindAdapterEx wiąże sterownik z każdym podstawowym sterownikiem miniportu, zanim zostanie wywołana jego funkcja MiniportInitializeEx w celu zainicjowania wirtualnego miniportu sterownika pośredniego. Sterowniki protokołu wyższego poziomu następnie wiążą się z wirtualnym miniportem, który one tworzą. Ta strategia umożliwia pośredniemu sterownikowi NDIS przydzielanie zasobów podczas tworzenia wirtualnego miniportu zgodnie z funkcjami podstawowego sterownika miniportu, z którym jest powiązany.