Cancelando uma solicitação de envio num driver de miniporta

A figura a seguir ilustra uma operação de cancelamento de envio de um driver de miniporta.

Diagrama que ilustra uma operação de cancelamento de envio por um driver miniporta.

Drivers de protocolos, filtros e intermediários podem chamar NdisCancelSendNetBufferLists para cancelar solicitações de envio pendentes. Esses drivers sobrepostos devem marcar os dados de envio com um ID de cancelamento antes de efetuarem uma solicitação de envio.

O NDIS chama a função MiniportCancelSend de um miniport driver para cancelar a transmissão de todas as estruturas de NET_BUFFER_LIST marcadas com um identificador de cancelamento especificado.

A função MiniportCancelSend de um driver de miniporta executa as seguintes operações:

  1. Percorre sua lista de solicitações de envio pendentes para o adaptador especificado e chama NDIS_GET_NET_BUFFER_LIST_CANCEL_ID para obter o identificador de cancelamento para cada estrutura de NET_BUFFER_LIST. O controlador de miniporta compara a ID de cancelamento que NDIS_GET_NET_BUFFER_LIST_CANCEL_ID retorna com a ID de cancelamento que NDIS passou para MiniportCancelSend.

  2. Remove de todas as estruturas de NET_BUFFER_LIST cujos identificadores de cancelamento correspondem ao identificador de cancelamento especificado de sua lista de solicitações de envio pendentes.

  3. Chama a função NdisMSendNetBufferListsComplete para todas as estruturas de NET_BUFFER_LIST canceladas, para devolver as estruturas. O driver de miniporta define o campo de estado das estruturas de NET_BUFFER_LIST como NDIS_STATUS_SEND_ABORTED.