PROTOCOL_CL_INCOMING_CLOSE_CALL回呼函式 (ndis.h)

ProtocolClIncomingCloseCall 函式會由所有連線導向的 NDIS 用戶端使用。 所有這類客戶端都必須具有功能完整的 ProtocolClIncomingCloseCall 函式。

注意 您必須使用 PROTOCOL_CL_INCOMING_CLOSE_CALL 類型來宣告函式。 如需詳細資訊,請參閱下列範例一節。
 

語法

PROTOCOL_CL_INCOMING_CLOSE_CALL ProtocolClIncomingCloseCall;

void ProtocolClIncomingCloseCall(
  [in] NDIS_STATUS CloseStatus,
  [in] NDIS_HANDLE ProtocolVcContext,
  [in] PVOID CloseData,
  [in] UINT Size
)
{...}

參數

[in] CloseStatus

指定狀態,指出連線終止的原因,這通常NDIS_STATUS_SUCCESS表示呼叫的遠端合作物件要求關閉連線。 任何其他值表示網路上的問題導致呼叫管理員終止連線。

[in] ProtocolVcContext

針對要關閉連線的 VC,指定用戶端每個 VC 內容區域的句柄。 無論 CloseStatus 的值為何,用戶端都無法在儲存在此內容區域中的 NDIsVcHandle 所指定的 VC 上傳送或接收數據。

[in] CloseData

緩衝區的指標,其中包含通訊協定特定的關閉訊息,可能是由呼叫管理員透過網路接收的遠端用戶端所提供,或者此參數可以是 NULL

CloseStatus NDIS_STATUS_SUCCESS時,如果基礎網路媒體不支援在關閉連線時傳輸數據,則此參數為 NULL 。 不過,任何特定的呼叫管理員可能會定義結構,以在網路上發生問題所造成的呼叫終止時,將其他診斷資訊傳遞給其用戶端。

[in] Size

指定 在 CloseData 的緩衝區位元組大小,如果 CloseDataNULL,則為零。

傳回值

備註

ProtocolClIncomingCloseCall 的呼叫表示已發生下列其中一項:

  • 呼叫管理員已透過網路收到要求,以關閉已建立的連線,由 NdisVcHandle 識別,用戶端儲存在其每個 VC 內容區域中 的 ProtocolVcContext
  • 呼叫管理員偵測到網路問題會防止在已建立的連線上進行進一步的數據傳輸。
不論是哪一種情況, ProtocolClIncomingCloseCall 都應該執行任何通訊協定決定的作業,例如通知用戶端的用戶端 () 連線中斷。 例如,如果要關閉的呼叫是由用戶端所建立的多點 VC,ProtocolClIncomingCloseCall 必須呼叫 NdisClDropParty 一或多次,直到只有單一方保留在其多點 VC 上為止。

無論指定的 VC 是單一點或多點連線, ProtocolClIncomingCloseCall 都必須呼叫 NdisCloseCall ,以確認用戶端不會嘗試傳送或預期接收此特定 VC 上的數據。 如果呼叫管理員建立了此 VC,ProtocolClIncomingCloseCall 應該會在呼叫 NdisCloseCall 之後傳回控制權。 呼叫管理員必須負責終結或重複使用它所建立的任何 VC。

如果用戶端最初為傳出呼叫建立此 VC,ProtocolClIncomingCloseCall 可以在呼叫 NdisClDropParty 之後視需要多次執行下列其中一項動作,如果有的話,以及 NdisCloseCall

  • 如果 CloseStatus 是NDIS_STATUS_SUCCESS,請使用 NdisCoDeleteVc 卸除 VC,然後釋放用戶端的每個 VC 內容區域,或準備在 後續呼叫 NdisCoCreateVc 時重複使用。
  • 如果 CloseStatus 是NDIS_STATUS_SUCCESS,請保留用戶端建立的 VC,並準備其每個 VC 內容區域,以便在 後續呼叫 NdisClMakeCall 時重複使用。
  • 否則,如果使用 NdisCoDeleteVc 卸除 VC,並在呼叫管理員指出網路變得無法運作時釋放其每個 VC 內容區域。

例子

若要定義 ProtocolClIncomingCloseCall 函式,您必須先提供函式宣告來識別您要定義的函式類型。 Windows 提供一組驅動程式的函式類型。 使用函式類型宣告函式有助於 驅動程式的程式代碼分析靜態驅動程式驗證程式 (SDV) ,以及其他驗證工具尋找錯誤,而且是撰寫 Windows 作業系統驅動程式的需求。

例如,若要定義名為 「 MyClIncomingCloseCall」 的 ProtocolClIncomingCloseCall 函式,請使用 PROTOCOL_CL_INCOMING_CLOSE_CALL 類型,如下列程式代碼範例所示:

PROTOCOL_CL_INCOMING_CLOSE_CALL MyClIncomingCloseCall;

然後,實作您的函式,如下所示:

_Use_decl_annotations_
VOID
 MyClIncomingCloseCall(
    NDIS_STATUS  CloseStatus,
    NDIS_HANDLE  ProtocolVcContext,
    PVOID  CloseData,
    UINT  Size
    )
  {...}

PROTOCOL_CL_INCOMING_CLOSE_CALL函式類型定義於 Ndis.h 頭檔中。 若要在執行程式代碼分析工具時更精確地識別錯誤,請務必將 Use_decl_annotations 批註新增至函式定義。 Use_decl_annotations批註可確保使用頭檔中套用至PROTOCOL_CL_INCOMING_CLOSE_CALL函式類型的註釋。 如需函數宣告需求的詳細資訊,請參閱 使用 NDIS 驅動程式的函式角色類型來宣告函式。

如需 Use_decl_annotations的詳細資訊,請參閱 標註函式行為

規格需求

需求
最低支援的用戶端 支援 NDIS 6.0 和 NDIS 5.1 驅動程式 (請參閱 Windows Vista 中的 ProtocolClIncomingCloseCall (NDIS 5.1) ) 。 (支援 NDIS 5.1 驅動程式,請參閱 Windows XP 中的 ProtocolClIncomingCloseCall (NDIS 5.1) ) 。
目標平台 Windows
標頭 ndis.h (包含 Ndis.h)
IRQL <= DISPATCH_LEVEL

另請參閱

NdisCloseCall

NdisClDropParty

NdisClMakeCall

NdisCmDispatchIncomingCloseCall

NdisCoCreateVc

NdisCoDeleteVc

NdisFreeMemory

NdisFreeToNPagedLo一sideList NdisMCmDispatchIncomingCloseCall

ProtocolClDropPartyComplete

ProtocolCoDeleteVc