共用方式為


取消傳送作業

下圖說明取消傳送作業。

顯示取消傳送作業程序的圖表。

驅動程式會針對每個傳遞至較低層級驅動程式以進行傳輸的 NET_BUFFER_LIST 結構,呼叫 NDIS_SET_NET_BUFFER_LIST_CANCEL_ID 巨集。 NDIS_SET_NET_BUFFER_LIST_CANCEL_ID函式會以取消標識符標記指定的封包。

將取消標識符指派給封包之前,驅動程式應該呼叫 NdisGeneratePartialCancelId,以取得它指派之每個取消標識符的高階位元組。 這可確保驅動程式不會重複系統中其他驅動程式指派的取消標識碼。 驅動程式通常會從 DriverEntry 例程呼叫 NdisGeneratePartialCancelId 一次;不過,驅動程式可以呼叫 NdisGeneratePartialCancelId 多次來取得多個部分取消標識符。

若要取消已標記NET_BUFFER_LIST結構中待處理的數據傳輸,驅動程式會將取消標識符傳遞給 NdisCancelSendNetBufferLists 函式。 驅動程式可以藉由呼叫 NDIS_GET_NET_BUFFER_LIST_CANCEL_ID 巨集來取得 NET_BUFFER_LIST 結構的取消標識符。

如果驅動程式以相同的取消標識符標記所有 NET_BUFFER_LIST 結構,則可以使用單一呼叫 NdisCancelSendNetBufferLists取消所有擱置中的傳輸。 如果驅動程式使用唯一標識符標記NET_BUFFER_LIST結構子群組內的所有NET_BUFFER_LIST結構,則可以透過呼叫一次 NdisCancelSendNetBufferLists方法取消該子群組內所有暫止的傳輸。

NDIS 會在系結上呼叫適當的低層驅動程式中的 MiniportCancelSend 函式。 中止暫止傳輸之後,基礎迷你埠驅動程式會呼叫 NdisMSendNetBufferListsComplete 函式,以傳回NET_BUFFER_LIST結構和完成狀態NDIS_STATUS_SEND_ABORTED。 NDIS 接著會呼叫適當的驅動程式 ProtocolSendNetBufferListsComplete 函式。

在其 ProtocolSendNetBufferListsComplete 函式中,通訊協定驅動程式可以呼叫NDIS_SET_NET_BUFFER_LIST_CANCEL_ID,並將 CancelId 設定為 NULL。 這可防止 NET_BUFFER_LIST 在未察覺的情況下再次與過時的取消標識碼一起被使用。