Udostępnij przez


Filtrowanie żądań OID w sterowniku filtru NDIS

Sterowniki filtrów mogą przetwarzać żądania identyfikatora OID pochodzące z leżących wyżej sterowników. NDIS wywołuje funkcję FilterOidRequest do przetworzenia każdego żądania OID. Sterowniki filtrów mogą przekazywać żądania OID do podstawowych sterowników, wywołując funkcję NdisFOidRequest .

NDIS może wywołać funkcję FilterCancelOidRequest sterownika filtru, aby anulować żądanie OID. Gdy funkcja NDIS wywołuje funkcję FilterCancelOidRequest, sterownik filtru powinien spróbować wywołać funkcję NdisFOidRequest tak szybko, jak to możliwe.

Na poniższej ilustracji przedstawiono przefiltrowane żądanie identyfikatora OID.

Diagram przedstawiający proces filtrowanego żądania OID.

Sterownik filtru może wykonać żądanie OID synchronicznie lub asynchronicznie, zwracając odpowiednio NDIS_STATUS_SUCCESS lub NDIS_STATUS_PENDING z filtru FilterOidRequest. Element FilterOidRequest może również wykonać synchronicznie ze statusem błędu.

Sterownik filtru, który pomyślnie obsługuje żądanie zestawu identyfikatorów OID, musi ustawić element członkowski SupportedRevision w strukturze NDIS_OID_REQUEST po powrocie z żądania zestawu identyfikatorów OID. Element SupportedRevision powiadamia inicjatora żądania OID o tym, którą wersję obsługuje sterownik. Aby uzyskać więcej informacji o wersji w strukturach NDIS, zobacz Określanie informacji o wersji NDIS.

Jeśli funkcja FilterOidRequest zwraca NDIS_STATUS_PENDING, musi wywołać funkcję NdisFOidRequestComplete po zakończeniu żądania OID. W tym przypadku sterownik przekazuje wyniki żądania w parametrze OidRequestNdisFOidRequestComplete. Sterownik przekazuje końcowy status żądania w parametrze Status funkcji NdisFOidRequestComplete.

Jeśli FilterOidRequest zwraca NDIS_STATUS_SUCCESS, zwraca wyniki żądania w strukturze NDIS_OID_REQUEST w parametrze OidRequest. W takim przypadku sterownik nie wywołuje funkcji NdisFOidRequestComplete .

Aby przekazać żądanie OID do podstawowych sterowników, sterownik filtru wywołuje funkcję NdisFOidRequest . Jeśli żądanie nie powinno być przekazywane do podstawowych sterowników, sterownik filtru może natychmiast wykonać żądanie. Aby ukończyć żądanie bez przekazywania, sterownik może zwrócić NDIS_STATUS_SUCCESS (lub stan błędu) w funkcji FilterOidRequest lub wywołać NdisFOidRequestComplete po powrocie NDIS_STATUS_PENDING.

Uwaga Przed wywołaniem NdisFOidRequest, sterownik musi przydzielić strukturę NDIS_OID_REQUEST i przenieść informacje żądania do nowej struktury, wywołując NdisAllocateCloneOidRequest.

Przekazane żądanie jest kontynuowane tak samo jak żądanie zainicjowane przez sterownik filtru. Aby uzyskać więcej informacji, zobacz Generowanie żądań OID ze sterownika filtru NDIS.

Po zakończeniu żądania przekazanego przez nie przez bazowe sterowniki, sterownik filtru może w razie potrzeby zmodyfikować odpowiedź i przekazać ją do nadrzędnych sterowników.

Sterownik filtru może odbierać żądania OID z nadległych sterowników, gdy znajduje się on w stanie Ponowne uruchamianie, Uruchamianie, Wstrzymywanie lub Wstrzymywanie.

Uwaga Podobnie jak sterowniki miniportów, sterowniki filtrów mogą odbierać tylko jedno żądanie OID naraz. Ponieważ usługa NDIS serializuje żądania wysyłane do modułu filtru, sterownik filtru nie może być wywoływany w poleceniu FilterOidRequest przed ukończeniem poprzedniego żądania.

Poniżej przedstawiono przykład sterownika filtru modyfikującego żądanie OID.

  • Sterownik filtru dodaje nagłówek. W takim przypadku, gdy sterownik otrzyma odpowiedź na zapytanie dotyczące OID_GEN_MAXIMUM_FRAME_SIZE ze sterowników bazowych, filtr odejmuje rozmiar nagłówka z odpowiedzi. Sterownik odlicza rozmiar swojego nagłówka, gdyż wstawia nagłówek przed każdym wysłanym pakietem i usuwa nagłówek z każdego odebranego pakietu.