Udostępnij przez


Wstrzymanie modułu filtru

Aby wstrzymać uruchomiony moduł filtru, usługa NDIS wywołuje funkcję FilterPause sterownika filtru. Moduł filtru wchodzi w stan wstrzymujący na początku działania w funkcji FilterPause.

NDIS pauzuje moduł filtru w ramach operacji Plug and Play, aby wstrzymać stos sterowników. Aby zapoznać się z omówieniem wstrzymania stosu sterowników, zobacz Wstrzymanie stosu sterowników.

W imieniu modułu filtrowego, który znajduje się w stanie wstrzymania, sterownik filtru:

  • Nie powinny się pojawiać żadne nowe sygnały odbioru.

    Aby uzyskać więcej informacji na temat operacji wysyłania i odbierania, zobacz Filter Module Send and Receive Operations.

  • Jeśli istnieją operacje odbierania, które zainicjował sterownik filtru, a NDIS ich nie ukończyło, sterownik filtru musi poczekać na ukończenie takich operacji przez NDIS. Operacja wstrzymywania nie zostanie ukończona, dopóki NDIS nie wywoła funkcji FilterReturnNetBufferLists dla wszystkich zaległych sygnałów odbioru.

  • Należy natychmiast zwrócić do NDIS wszelkie zaległe informacje o odbiorze wygenerowane przez bazowe sterowniki. Operacja wstrzymania nie zostanie ukończona, dopóki sterownik nie wywoła NdisFReturnNetBufferLists funkcji dla tak wybitnych wskazówek odbioru. Te nierozpatrzone wskaźniki odbioru mogą istnieć, jeśli sterownik kolejkuje bufory odbierane z podstawowych sterowników.

  • Należy zwrócić nowe sygnały, że podstawowe sterowniki pochodzą z NDIS natychmiast przez wywołanie funkcji NdisFReturnNetBufferLists. W razie potrzeby sterownik może skopiować odbierane sygnały i umieścić je w kolejce, zanim je zwróci.

    UwagaNdisFReturnNetBufferLists nie powinna być wywoływana dla list NBLs wskazywanych przy użyciu flagi NDIS_RECEIVE_FLAGS_RESOURCES ustawionej w odpowiednim wywołaniu FilterReceiveNetBufferLists. Takie listy NBL są zwracane synchronicznie do NDIS, wracając z procedury FilterReceiveNetBufferLists.

  • Nie powinny być inicjowane żadne nowe żądania wysyłania.

  • Jeśli istnieją operacje wysyłania zainicjowane przez sterownik filtru, które NDIS jeszcze nie zakończył, sterownik filtru musi poczekać, aż NDIS zakończy takie operacje. Operacja wstrzymania nie zostanie ukończona, dopóki NDIS nie wywoła funkcji FilterSendNetBufferListsComplete dla wszystkich takich zaległych żądań wysyłania.

  • Powinna natychmiast zwrócić wszystkie nowe żądania wysyłania skierowane do funkcji FilterSendNetBufferLists, poprzez wywołanie funkcji NdisFSendNetBufferListsComplete. Sterownik filtru powinien ustawić w każdej strukturze NET_BUFFER_LIST pole Status na NDIS_STATUS_PAUSED.

  • Może dostarczać wskazania stanu za pomocą funkcji NdisFIndicateStatus.

    Aby uzyskać więcej informacji o wskazaniach stanu, zobacz Identyfikatory stanu modułu filtru.

  • Powinna obsługiwać wskazania stanu w funkcji FilterStatus.

  • Powinna obsługiwać żądania OID w funkcji FilterOidRequest.

    Aby uzyskać więcej informacji na temat żądań OID, zobacz Filter Module OID Requests.

  • Może inicjować żądania OID.

  • Nie należy podczas operacji dołączania zwalniać zasobów przydzielonych przez sterownik.

  • Należy anulować czasomierze, jeśli jest to wymagane, aby zatrzymać operacje wysyłania i odbierania.

    Aby uzyskać więcej informacji na temat czasomierzy, zobacz usługi czasomierza NDIS 6.0.

Po pomyślnym wstrzymaniu operacji wysyłania i odbierania sterownik filtru musi zakończyć operację wstrzymania. Sterownik filtru może wykonać operację wstrzymania synchronicznie lub asynchronicznie, zwracając odpowiednio NDIS_STATUS_SUCCESS lub NDIS_STATUS_PENDING z FilterPause.

Jeśli sterownik zwróci NDIS_STATUS_PENDING, po zakończeniu operacji wstrzymania musi wywołać funkcję NdisFPauseComplete.

W imieniu modułu filtra, który znajduje się w stanie Wstrzymany, sterownik filtra:

  • Nie należy inicjować nowych wskazań odbioru.

  • Należy natychmiast zwrócić nowe sygnały odbioru, które wskazują, że bazowe sterowniki mają swój początek w NDIS, wywołując funkcję NdisFReturnNetBufferLists. W razie potrzeby sterownik może skopiować odbierane sygnały i umieścić je w kolejce, zanim je zwróci.

  • Nie powinno tworzyć nowych żądań wysyłania.

  • Powinna natychmiast zwrócić wszystkie nowe żądania wysyłania skierowane do funkcji FilterSendNetBufferLists, poprzez wywołanie funkcji NdisFSendNetBufferListsComplete. Sterownik filtru powinien ustawić w każdej strukturze NET_BUFFER_LIST pole Status na NDIS_STATUS_PAUSED.

  • Może dostarczać wskazania stanu za pomocą funkcji NdisFIndicateStatus.

  • Powinna obsługiwać wskazania stanu w funkcji FilterStatus.

  • Powinna obsługiwać żądania OID w funkcji FilterOidRequest.

  • Może inicjować żądania OID.

NDIS nie inicjuje innych operacji Plug and Play, takich jak dołączanie, odłączanie lub żądania ponownego uruchomienia, podczas gdy sterownik filtru jest w stanie pauzowania. Usługa NDIS może inicjować żądania odłączania lub ponownego uruchamiania po tym, jak sterownik filtru znajduje się w stanie Wstrzymano. Aby uzyskać więcej informacji na temat odłączania modułu filtru, zobacz Odłączanie modułu filtru. Aby uzyskać więcej informacji na temat ponownego uruchamiania modułu filtru, zobacz Uruchamianie modułu filtru.