Udostępnij przez


Inicjowanie sterownika filtru

Inicjowanie sterownika filtru następuje natychmiast po załadowaniu sterownika przez system. Sterowniki filtrujące ładują się jako usługi systemowe. System może ładować sterowniki filtrów w dowolnym momencie przed obciążeniem sterowników miniportu lub po nim. NDIS może dołączyć moduł filtru do karty miniport, gdy karta miniportowa typu obsługiwanego przez sterownik filtru stanie się dostępna, a inicjalizacja sterownika filtru zostanie ukończona.

Podczas uruchamiania stosu sterowników system ładuje sterowniki filtrów, jeśli nie zostały jeszcze załadowane. Aby uzyskać więcej informacji na temat uruchamiania stosu sterowników zawierającego moduły filtru, zobacz Uruchamianie stosu sterowników.

Po załadowaniu sterownika filtra system wywołuje procedurę sterownika DriverEntry.

System przekazuje dwa argumenty do DriverEntry:

  • Wskaźnik na obiekt sterownika, utworzony przez system we/wy.

  • Wskaźnik do ścieżki rejestru, który określa, gdzie są przechowywane parametry specyficzne dla sterownika.

DriverEntry zwraca STATUS_SUCCESS lub jego równoważnik NDIS_STATUS_SUCCESS, jeśli sterownik został pomyślnie zarejestrowany jako sterownik filtra NDIS. Jeśli inicjalizacja przez DriverEntry zakończy się niepowodzeniem z powodu propagacji kodu błędu zwróconego przez funkcję NdisXxx lub przez rutynę wsparcia w trybie jądra, sterownik nie pozostanie załadowany. DriverEntry musi być wykonywana synchronicznie, co oznacza, że nie może zwrócić STATUS_PENDING ani równoważnej mu NDIS_STATUS_PENDING.

Sterownik filtru przekazuje obiekt sterownika do funkcji NdisFRegisterFilterDriver podczas rejestrowania w usłudze NDIS jako sterownika filtru. Sterownik może użyć ścieżki rejestru, aby uzyskać informacje o konfiguracji. Aby uzyskać więcej informacji na temat uzyskiwania dostępu do informacji o konfiguracji sterownika filtru, zobacz Uzyskiwanie dostępu do informacji o konfiguracji dla sterownika filtru.

Sterownik filtru wywołuje NdisFRegisterFilterDriver w swojej procedurze DriverEntry. Sterowniki filtrów eksportują zestaw funkcji FilterXxx, przekazując strukturę NDIS_FILTER_DRIVER_CHARACTERISTICS do NdisFRegisterFilterDriver w parametrze FilterCharacteristics.

Struktura NDIS_FILTER_DRIVER_CHARACTERISTICS określa punkty wejścia dla obowiązkowych i opcjonalnych funkcji FilterXxx. Niektóre funkcje opcjonalne można pominąć. Aby uzyskać więcej informacji na temat omijania funkcji, zobacz Tryb obejścia danych.

Sterowniki, które wywołują NdisFRegisterFilterDriver, muszą być przygotowane do natychmiastowego wywołania którejkolwiek z ich funkcji FilterXxx.

Struktura NDIS_FILTER_DRIVER_CHARACTERISTICS określa punkty wejścia dla tych obowiązkowych funkcji FilterXxx:

FiltrZałącz

filterDetach

FilterRestart

Wstrzymanie filtra

Struktura NDIS_FILTER_DRIVER_CHARACTERISTICS określa punkty wejścia dla tych opcjonalnych i niezmienialnych w czasie wykonywania funkcji FilterXxx:

FilterSetOptions

FilterSetModuleOptions

FilterOidRequest

FilterOidRequestComplete

FilterStatus

FilterNetPnPEvent

FilterDevicePnPEventNotify

FilterCancelSendNetBufferLists

Struktura NDIS_FILTER_DRIVER_CHARACTERISTICS określa domyślne punkty wejścia dla funkcji FilterXxx, które są opcjonalne i mogą być zmieniane w czasie wykonywania.

FilterSendNetBufferLists

FilterSendNetBufferListsComplete

FilterReturnNetBufferLists

FilterReceiveNetBufferLists

Poprzednie cztery funkcje są również zdefiniowane w strukturze NDIS_FILTER_PARTIAL_CHARACTERISTICS. Ta struktura określa funkcje, które można zmienić w czasie wykonywania, wywołując funkcję NdisSetOptionalHandlers z funkcji filterSetModuleOptions. Jeśli sterownik filtru zmieni te częściowe cechy podczas działania, musi podać punkt wejścia dla FilterSetModuleOptions. Częściowe cechy mogą być różne dla każdego modułu filtru. Aby uzyskać więcej informacji, zobacz Uruchamianie modułu filtru.

NDIS wywołuje funkcję FilterSetOptions w kontekście wywołania do NdisFRegisterFilterDriver. FilterSetOptions rejestruje opcjonalne usługi w ramach NDIS. Aby uzyskać więcej informacji, zobacz Konfigurowanie opcjonalnych usług sterownika filtrującego.

Jeśli wywołanie NdisFRegisterFilterDriver powiedzie się, NDIS wypełnia zmienną w NdisFilterDriverHandle za pomocą uchwytu sterownika filtru. Sterownik filtru przechowuje uchwyt, a następnie przekazuje go do funkcji NDIS, takich jak NdisFDeregisterFilterDriver, które wymagają uchwytu sterownika filtru jako parametru wejściowego. Kiedy sterownik jest rozładowywany, musi wywołać funkcję NdisFDeregisterFilterDriver, aby zwolnić zasoby sterownika przydzielone przez NdisFRegisterFilterDriver.

Po powrocie FilterSetOptions moduły filtru są w stanie odłączonym. Usługa NDIS może wywołać funkcję FilterAttach sterownika filtru w dowolnym momencie po zakończeniu wywołania FilterSetOptions. Sterownik wykonuje inicjowanie specyficzne dla modułu filtru w funkcji FilterAttach. Aby uzyskać więcej informacji na temat dołączania modułu filtru do stosu sterowników, zobacz Dołączanie modułu filtru.

Sterownik filtru wykonuje również wszelką inną inicjalizację specyficzną dla sterownika, której wymaga w DriverEntry. Sterownik filtru musi zwolnić zasoby specyficzne dla sterownika, które zostały przydzielone w jego rutynie FilterDriverUnload. Aby uzyskać więcej informacji, zobacz Usuwanie sterownika filtru.