Udostępnij przez


Anulowanie operacji wysyłania

Na poniższej ilustracji przedstawiono anulowanie operacji wysyłania.

Diagram przedstawiający proces anulowania operacji wysyłania.

Sterownik wywołuje makro NDIS_SET_NET_BUFFER_LIST_CANCEL_ID dla każdej struktury NET_BUFFER_LIST, którą przekazuje do sterowników niskiego poziomu w celu transmisji. Funkcja NDIS_SET_NET_BUFFER_LIST_CANCEL_ID oznacza określony pakiet za pomocą identyfikatora anulowania.

Przed przypisaniem identyfikatorów anulowania do pakietów sterownik powinien wywołać NdisGeneratePartialCancelId, aby uzyskać najstarszy bajt każdego przypisanego identyfikatora anulowania. Dzięki temu sterownik nie duplikuje identyfikatorów anulowania przypisanych przez inne sterowniki w systemie. Sterowniki zazwyczaj wywołują NdisGeneratePartialCancelId raz z procedury DriverEntry, jednak sterowniki mogą uzyskać więcej niż jeden identyfikator częściowego anulowania, wywołując NdisGeneratePartialCancelId więcej niż raz.

Aby anulować oczekującą transmisję danych w oznaczonej strukturze NET_BUFFER_LIST, sterownik przekazuje identyfikator anulowania do funkcji NdisCancelSendNetBufferLists . Sterowniki mogą uzyskać identyfikator anulowania struktury NET_BUFFER_LIST przez wywołanie makra NDIS_GET_NET_BUFFER_LIST_CANCEL_ID.

Jeśli sterownik oznacza wszystkie struktury NET_BUFFER_LIST z tym samym identyfikatorem anulowania, może anulować wszystkie oczekujące transmisje za pomocą jednego wywołania do NdisCancelSendNetBufferLists. Jeśli sterownik 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 NdisCancelSendNetBufferLists.

NDIS wywołuje funkcję MiniportCancelSend odpowiedniego sterownika niższego poziomu na powiązaniu. Po przerwaniu oczekującej transmisji podstawowy sterownik miniportu wywołuje funkcję NdisMSendNetBufferListsComplete, aby zwrócić struktury NET_BUFFER_LIST oraz status ukończenia NDIS_STATUS_SEND_ABORTED. Z kolei usługa NDIS wywołuje funkcję ProtocolSendNetBufferListsComplete odpowiedniego sterownika.

W funkcji ProtocolSendNetBufferListsComplete sterownik protokołu może wywołać NDIS_SET_NET_BUFFER_LIST_CANCEL_ID z wartością CancelId ustawioną na null. Uniemożliwia to przypadkowe ponowne użycie NET_BUFFER_LIST ze starym identyfikatorem anulowania.