Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A figura a seguir ilustra o cancelamento de uma operação de envio.
Um driver chama a macro NDIS_SET_NET_BUFFER_LIST_CANCEL_ID para cada estrutura NET_BUFFER_LIST que passa para transmissão aos drivers de nível inferior. A função NDIS_SET_NET_BUFFER_LIST_CANCEL_ID marca o pacote especificado com um identificador de cancelamento.
Antes de atribuir IDs de cancelamento a pacotes, um driver deve chamar NdisGeneratePartialCancelId para obter o byte de ordem superior de cada ID de cancelamento atribuído. Isso garante que o condutor não duplique IDs de cancelamento atribuídos por outros condutores no sistema. Os drivers normalmente chamam NdisGeneratePartialCancelId uma vez a partir da rotina DriverEntry; no entanto, os drivers podem obter mais de um identificador de cancelamento parcial chamando NdisGeneratePartialCancelId mais de uma vez.
Para cancelar a transmissão pendente de dados numa estrutura NET_BUFFER_LIST marcada, um driver passa a identificação de cancelamento para a função NdisCancelSendNetBufferLists. Os drivers podem obter o ID de cancelamento de uma estrutura de NET_BUFFER_LIST chamando a macro NDIS_GET_NET_BUFFER_LIST_CANCEL_ID.
Se um driver marcar todas as estruturas NET_BUFFER_LIST com o mesmo identificador de cancelamento, ele poderá cancelar todas as transmissões pendentes com uma única chamada para NdisCancelSendNetBufferLists. Se um driver marcar com um identificador exclusivo todas as estruturas NET_BUFFER_LIST dentro de um subgrupo de estruturas NET_BUFFER_LIST, ele poderá cancelar todas as transmissões pendentes nesse subgrupo com uma única chamada para NdisCancelSendNetBufferLists.
O NDIS chama a função MiniportCancelSend do driver de nível inferior apropriado na ligação. Depois de abortar a transmissão pendente, o driver de miniporta subjacente chama a função NdisMSendNetBufferListsComplete para devolver as estruturas NET_BUFFER_LIST e um status de conclusão de NDIS_STATUS_SEND_ABORTED. O NDIS, por sua vez, chama a função do driver ProtocolSendNetBufferListsComplete.
Na sua função ProtocolSendNetBufferListsComplete, um driver de protocolo pode chamar NDIS_SET_NET_BUFFER_LIST_CANCEL_ID com CancelId definido como NULL. Isso evita que o NET_BUFFER_LIST seja usado inadvertidamente novamente com um ID de cancelamento obsoleto.