Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Sterownik filtru może anulować żądania wysyłania pochodzące od sterownika filtru lub pochodzące od sterowników nadrzędnych.
Anulowanie żądań wysyłanych przez sterownik filtru
Na poniższej ilustracji przedstawiono anulowanie żądania wysłania, które zostało utworzone przez sterownik filtru.
Sterownik filtru wywołuje makro NDIS_SET_NET_BUFFER_LIST_CANCEL_ID dla każdej struktury NET_BUFFER_LIST, którą tworzy na potrzeby operacji wysyłania. Funkcja NDIS_SET_NET_BUFFER_LIST_CANCEL_ID oznacza określone dane za pomocą identyfikatora anulowania.
Przed przypisaniem identyfikatorów anulowania do danych sieciowych sterownik filtru musi wywołać NdisGeneratePartialCancelId, aby uzyskać bajt o wysokiej kolejności każdego przypisanego identyfikatora anulowania. Dzięki temu sterownik nie duplikuje identyfikatorów anulowania przypisanych przez inne sterowniki w systemie. Sterowniki zwykle wywołują NdisGeneratePartialCancelId raz w procedurze DriverEntry. Sterowniki mogą jednak uzyskać więcej niż jeden identyfikator anulowania częściowego, wywołując NdisGeneratePartialCancelId wielokrotnie.
Aby anulować oczekującą transmisję danych w oznaczonej strukturze NET_BUFFER_LIST, sterownik filtru przekazuje identyfikator anulowania do funkcji NdisFCancelSendNetBufferLists. Sterowniki mogą uzyskać identyfikator anulowania struktury NET_BUFFER_LIST przez wywołanie makra NDIS_GET_NET_BUFFER_LIST_CANCEL_ID.
Jeśli sterownik filtru przypisuje wszystkim strukturom NET_BUFFER_LIST ten sam identyfikator anulowania, może anulować wszystkie oczekujące transmisje za pomocą jednego wywołania do NdisFCancelSendNetBufferLists. Jeśli sterownik filtru oznacza wszystkie struktury NET_BUFFER_LIST w podgrupie struktur NET_BUFFER_LIST z unikatowym identyfikatorem, może anulować wszystkie oczekujące transmisje w tej podgrupie z jednym wywołaniem do NdisFCancelSendNetBufferLists.
NDIS wywołuje funkcję anulowania wysyłki sterowników niższego poziomu. Po przerwaniu oczekującej transmisji podstawowe sterowniki wywołają funkcję wysyłania pełnej (na przykład NdisMSendNetBufferListsComplete) w celu zwrócenia struktur NET_BUFFER_LIST ze stanem ukończenia NDIS_STATUS_SEND_ABORTED. NDIS z kolei wywołuje funkcję sterownika filtru FilterSendNetBufferListsComplete.
W FilterSendNetBufferListsCompletesterownik filtru może wywoływać NDIS_SET_NET_BUFFER_LIST_CANCEL_ID za pomocą CancelId ustawioną na wartość null. Zapobiega to przypadkowemu użyciu NET_BUFFER_LIST ze nieaktualnym identyfikatorem anulowania.
Anulowanie żądań wysyłania pochodzących z nakładających się sterowników
Na poniższej ilustracji przedstawiono anulowanie żądania wysłania, które zostało zainicjowane przez wyższy sterownik.
Sterowniki nadrzędne wywołują funkcję anulowania wysyłania (NdisFCancelSendNetBufferLists lub NdisCancelSendNetBufferLists) w celu anulowania oczekujących żądań wysyłania. Te nakładające się sterowniki muszą oznaczać dane do wysyłki za pomocą identyfikatora anulowania przed złożeniem żądania wysyłki.
NDIS wywołuje funkcję FilterCancelSendNetBufferLists sterownika filtru w celu anulowania transmisji wszystkich struktur NET_BUFFER_LIST oznaczonych określonym identyfikatorem anulowania.
FilterCancelSendNetBufferLists wykonuje następujące operacje:
Przechodzi przez listę struktur NET_BUFFER_LIST zakolejkowanych przez sterownik filtru dla określonego modułu filtru i wywołuje makro NDIS_GET_NET_BUFFER_LIST_CANCEL_ID w celu uzyskania identyfikatora anulowania dla każdej struktury. Sterownik filtru porównuje identyfikator anulowania zwracany przez funkcję NDIS_GET_NET_BUFFER_LIST_CANCEL_ID z identyfikatorem anulowania przekazanym przez NDIS do FilterCancelSendNetBufferLists.
Usuwa z kolejki wysyłania (odłącza) wszystkie struktury NET_BUFFER_LIST, których identyfikatory anulowania są zgodne z określonym identyfikatorem anulowania.
Wywołuje funkcję NdisFSendNetBufferListsComplete dla wszystkich niezwiązanych struktur NET_BUFFER_LIST, aby zwrócić te struktury. Sterownik filtru ustawia pole stanu struktur NET_BUFFER_LIST na NDIS_STATUS_SEND_ABORTED.
Wywołuje funkcję NdisFCancelSendNetBufferLists, aby przekazać żądanie anulowania wysyłania do podstawowych sterowników. Sterownik filtru przekazuje identyfikator odwołania otrzymany od nadrzędnego sterownika. Operacja anulowania przebiega tak jak operacja anulowania wysyłania zainicjowana przez sterownik filtru.