共用方式為


NdisClCloseCall 函式 (ndis.h)

NdisClCloseCall 要求在指定的 VC 上呼叫已損毀。

語法

NDIS_STATUS NdisClCloseCall(
  [in]           NDIS_HANDLE NdisVcHandle,
  [in, optional] NDIS_HANDLE NdisPartyHandle,
  [in, optional] PVOID       Buffer,
  [in]           UINT        Size
);

參數

[in] NdisVcHandle

正在關閉或中斷連線之呼叫的 VC 句柄。 當 VC 最初是使用 NdisCoCreateVc 建立時,NDIS 會提供此句柄,不論是由用戶端準備進行撥出電話,還是由呼叫管理員準備分派來電給用戶端。

[in, optional] NdisPartyHandle

要卸除於多點 VC 或 NULL 的最後一方句柄。 如果這是多點 VC,用戶端會從 先前呼叫 NdisClMakeCallNdisClAddParty 取得此句柄。

[in, optional] Buffer

呼叫端配置的緩衝區指標,其中包含連接關閉時要傳送至遠端節點上合作物件的任何數據。 視基礎媒體而定,此指標可以是 NULL

[in] Size

如果 BufferNULL,則指定 Buffer 的大小,以位元組為單位,以位元組為單位。

傳回值

NdisCloseCall 傳回NDIS_STATUS_PENDING以外的任何專案時,客戶端應該對其進行內部呼叫 ProtocolCloseCallComplete 函式 。 否則,當此作業完成時,NDIS 會呼叫用戶端的 ProtocolCloseCallComplete 函式。

備註

用戶端通常會在下列任一情況下呼叫 NdisCloseCall

  • 若要關閉已建立的呼叫,不論呼叫是由用戶端使用 NdisClMakeCall 起始,還是由遠端對等提供並由用戶端接受 ProtocolClIncomingCall 函式。
  • ProtocolClIncomingCloseCall 函式,以終止已建立的呼叫。

    當遠端合作物件關閉遠端合作物件最初起始且用戶端接受的連入呼叫時,就會發生這種情況。 針對用戶端起始的傳出呼叫,當遠端合作物件關閉遠端節點上的點對點連線,或多點 VC 的最後一個剩餘方關閉遠端節點上的呼叫時,就會發生這種情況。

  • ProtocolClMakeCallComplete 函式,以終止用戶端起始嘗試進行傳出呼叫。

    如果呼叫管理員已修改傳遞至 NdisClMakeCall 的用戶端指定呼叫參數,且客戶端發現這些修改無法接受,就會發生這種情況。

  • ProtocolClIncomingQoSChange 函式終止已建立的呼叫。

    如果客戶端無法接受 VC 上另一方所提議的 QoS 變更,就會發生這種情況。

  • ProtocolClModifyCallQoSComplete 函 式,以終止已建立的呼叫。

    如果不接受 VC 上的客戶端建議 QoS 變更,且 CM 修改的 QoS 傳回至 ProtocolClModifyCallQoSComplete 對客戶端無法接受,就會發生這種情況。

在呼叫 NdisCloseCall 之前,通訊協議必須確定其所有未處理的傳送封包都已傳回至其 ProtocolCoSendNetBufferListsComplete 函式 。 (透過 NdisCoSendNetBufferLists 傳送的封包一律會以異步方式傳回至 ProtocolCoSendNetBufferListsComplete.) 在呼叫 NdisCloseCall 之後,通訊協定不得呼叫 NdisCoSendNetBufferLists ,以在 NdisCloseCall 所參考的 VC 上傳送封包。

用戶端對 NdisCloseCall 的呼叫會導致 NDIS 將 NdisVcHandle 標示為關閉,並呼叫 CM 的 ProtocolCmCloseCall 函 式。

若要在用戶端建立的多點 VC 上終止已建立的呼叫,客戶端必須呼叫 NdisClDropParty 一或多次,才能釋放 VC 上最後一方,再呼叫 NdisCloseCall。 如果指定的 VC 仍有一個以上的合作對象連接,呼叫管理員會讓任何用戶端的要求都無法關閉多點呼叫。 傳遞至 NdisCloseCallNdisPartyHandle 可以是用戶端從先前呼叫 NdisClAddPartyNdisClMakeCall 與指定 NdisVcHandle 取得的任何有效句柄。

身為用戶端起始之多點呼叫要求的遠端合作物件,只要用戶端建立的多點 VC 上有多個未完成的合作物件存在,NDIS 就會呼叫該用戶端的 ProtocolClDropParty 函 式。 當最後一個剩餘的遠端合作物件關閉其連線時,NDIS 會呼叫用戶端的 ProtocolClIncomingCloseCall 函 式改為。 因此,設定多點連線之任何用戶端的 ProtocolClIncomingCloseCall 函式必須識別其多點 VM 上的最後一個剩餘合作物件,並將適當的 NdisPartyHandle 傳遞給 NdisCloseCall

在用戶端使用 NdisClCloseCall 發行 NdisPartyHandle 之後,它可以發行 (或重新初始化,以重複使用) 其所維護之每一方狀態的資源。 不過,客戶端無法在完成以 NdisCloseCall 起始的作業時釋放或重複使用其每個 VC 資源,因為 NdisVcHandle 因為 NdisVcHandle 被標示為關閉,所以無法重複使用它來進行另一個呼叫,直到 VC 終結為止。 如果客戶端在發行或重新初始化其每個 VC 資源之前建立 VC,用戶端必須呼叫 NdisCoDeleteVc ,否則客戶端必須延遲發行或重新初始化這些資源,直到呼叫其 ProtocolCoDeleteVc 函式為止。

規格需求

需求
最低支援的用戶端 支援 NDIS 6.0 和 NDIS 5.1 驅動程式, (請參閱 Windows Vista 中的 NdisCloseCall (NDIS 5.1) ) 。 支援 NDIS 5.1 驅動程式 (請參閱 Windows XP 中的 NdisCloseCall (NDIS 5.1) ) 。
目標平台 桌面
標頭 ndis.h (包含 Ndis.h)
程式庫 Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 合規性規則 Irql_Protocol_Driver_Function ()

另請參閱

NdisClDropParty

NdisClMakeCall

NdisClModifyCallQoS

NdisCoDeleteVc

NdisCoSendNetBufferLists

ProtocolCloseCallComplete

ProtocolClIncomingCallQoSChange

ProtocolClIncomingCloseCall

ProtocolClIncomingDropParty

ProtocolClMakeCallComplete

ProtocolClModifyCallQoSComplete

ProtocolCmCloseCall

ProtocolCoSendNetBufferListsComplete