보내기 작업 취소
다음 그림에서는 보내기 작업을 취소하는 방법을 보여 줍니다.
드라이버는 전송을 위해 하위 수준 드라이버에 전달하는 각 NET_BUFFER_LIST 구조에 대해 NDIS_SET_NET_BUFFER_LIST_CANCEL_ID 매크로를 호출합니다. NDIS_SET_NET_BUFFER_LIST_CANCEL_ID 함수는 지정된 패킷을 취소 식별자로 표시합니다.
패킷에 취소 ID를 할당하기 전에 드라이버는 NdisGeneratePartialCancelId 를 호출하여 할당하는 각 취소 ID의 상위 바이트를 가져와야 합니다. 이렇게 하면 드라이버가 시스템의 다른 드라이버에서 할당한 취소 ID를 중복하지 않습니다. 드라이버는 일반적으로 DriverEntry 루틴에서 NdisGeneratePartialCancelId를 한 번 호출합니다. 그러나 드라이버는 NdisGeneratePartialCancelId를 두 번 이상 호출하여 둘 이상의 부분 취소 식별자를 가져올 수 있습니다.
표시된 NET_BUFFER_LIST 구조에서 보류 중인 데이터 전송을 취소하기 위해 드라이버는 취소 ID를 NdisCancelSendNetBufferLists 함수에 전달합니다. 드라이버는 NDIS_GET_NET_BUFFER_LIST_CANCEL_ID 매크로를 호출하여 NET_BUFFER_LIST 구조체의 취소 ID를 가져올 수 있습니다.
드라이버가 동일한 취소 식별자를 사용하여 모든 NET_BUFFER_LIST 구조를 표시하는 경우 NdisCancelSendNetBufferLists에 대한 단일 호출로 보류 중인 모든 전송을 취소할 수 있습니다. 드라이버가 고유 식별자를 사용하여 NET_BUFFER_LIST 구조의 하위 그룹 내에 있는 모든 NET_BUFFER_LIST 구조를 표시하는 경우 NdisCancelSendNetBufferLists에 대한 단일 호출을 사용하여 해당 하위 그룹 내에서 보류 중인 모든 전송을 취소할 수 있습니다.
NDIS는 바인딩에서 적절한 하위 수준 드라이버의 MiniportCancelSend 함수를 호출합니다. 보류 중인 전송을 중단한 후 기본 미니포트 드라이버는 NdisMSendNetBufferListsComplete 함수를 호출하여 NET_BUFFER_LIST 구조와 NDIS_STATUS_SEND_ABORTED 완료 상태 반환합니다. NDIS는 적절한 드라이버의 ProtocolSendNetBufferListsComplete 함수를 호출합니다 .
ProtocolSendNetBufferListsComplete 함수에서 프로토콜 드라이버는 CancelId가 NULL로 설정된 NDIS_SET_NET_BUFFER_LIST_CANCEL_ID 호출할 수 있습니다. 이렇게 하면 NET_BUFFER_LIST 실수로 부실 취소 ID와 함께 다시 사용되지 않습니다.