PROTOCOL_CM_MAKE_CALL回呼函式 (ndis.h)

ProtocolCmMakeCall 函式是必要函式,可設定虛擬連線的媒體特定參數, (VC) 並啟用虛擬連線。

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

語法

PROTOCOL_CM_MAKE_CALL ProtocolCmMakeCall;

NDIS_STATUS ProtocolCmMakeCall(
  [in]            NDIS_HANDLE CallMgrVcContext,
  [in, out]       PCO_CALL_PARAMETERS CallParameters,
  [in, optional]  NDIS_HANDLE NdisPartyHandle,
  [out, optional] PNDIS_HANDLE CallMgrPartyContext
)
{...}

參數

[in] CallMgrVcContext

指定呼叫管理員配置的內容區域的句柄,其中呼叫管理員會維護其每個 VC 狀態。 呼叫管理員已從其 ProtocolCoCreateVc 函式將此句柄提供給 NDIS。

[in, out] CallParameters

CO_CALL_PARAMETERS 結構的指標,其中包含這個傳出呼叫的連接導向用戶端所指定的參數。

[in, optional] NdisPartyHandle

指定 NDIS 所提供的句柄,該句柄可唯一識別多點虛擬連線上的初始合作物件。 此句柄對呼叫管理員而言不透明,並保留給 NDIS 連結庫使用。 如果客戶端未設定傳出多點呼叫,則此句柄為 NULL

[out, optional] CallMgrPartyContext

在傳回時,指定呼叫管理員所提供內容區域的句柄,呼叫管理員會在多點呼叫上維護初始合作物件的狀態。 如果 NdisPartyHandleNULL,此句柄必須設定為 NULL

傳回值

ProtocolCmMakeCall 會以下列其中一個值傳回其作業的狀態 (s) :

傳回碼 Description
NDIS_STATUS_SUCCESS
表示呼叫管理員已成功配置必要的資源來進行呼叫,而且能夠啟用與迷你埠驅動程式的虛擬連線。
NDIS_STATUS_PENDING
表示呼叫管理員會完成要求,以異步方式進行呼叫。 當呼叫管理員完成進行通話的所有作業時,它必須呼叫 NdisCmMakeCallComplete ,以向 NDIS 發出此呼叫已完成的訊號。
NDIS_STATUS_RESOURCES
表示呼叫管理員無法配置和/或初始化其資源,以啟用用戶端所要求的虛擬連線。
NDIS_STATUS_NOT_SUPPORTED
表示呼叫管理員無法啟動虛擬連線,因為呼叫端在 CallParameters 指定的呼叫參數中要求無效或無法使用的功能。

備註

如果 ProtocolCmMakeCall 獲得明確的 NdisPartyHandle,此 VC 是由客戶端針對多點呼叫所建立。 呼叫管理員必須配置和初始化維護狀態資訊及控制多點呼叫所需的任何必要資源。 這類資源包括但不限於記憶體緩衝區、數據結構、事件和其他類似的資源。 如果呼叫管理員無法為其狀態區域配置或初始化其狀態區域 () ,它應該會傳回控制權給具有NDIS_STATUS_RESOURCES的 NDIS。

ProtocolCmMakeCall 會視需要與網路控制裝置或其他媒體特定動作項目通訊,以根據 CallParameters 指定的呼叫參數,建立本機節點與遠端節點之間的連線。 這類動作包括但不限於切換硬體的通訊、網路控制站的通訊,或網路媒體適用的其他動作。

如果需要呼叫管理員才能與網路硬體通訊 (例如網路交換器) 它應該使用其 ProtocolBindAdapterEx 函式中建立的網路控制裝置虛擬連線。 通話管理員透過迷你埠驅動程式與其網路硬體通訊,方法是呼叫 NdisCoSendNetBufferLists。 具有整合式呼叫管理支援的迷你埠驅動程式不會呼叫 NdisCoSendNetBufferLists,而是會自行傳輸數據。

在通話管理員完成與媒體所需之網路硬體的所有必要通訊之後,通話管理員必須呼叫 NdisCmActivateVc

如果此呼叫是多點呼叫,在呼叫管理員與網路硬體通訊、已驗證的呼叫參數,以及配置並初始化其個別合作對象狀態數據之後,其狀態區塊的位址應該在句柄 CallMgrPartyContext 中設定,再將控制權傳回 NDIS。 句柄的設定方式是取值句柄,並將狀態區塊的指標儲存為句柄的值。 例如:

*CallMgrPartyContext = SomeBuffer ;

如果 ProtocolCmMakeCall 已完成其網路的必要作業,且 VC 已透過 NdisCmActivateVc 成功啟用, ProtocolCmMakeCall 應該儘快傳回控制權,且狀態為 STATUS_SUCCESS。

當 ProtocolCmMakeCall 將控制權傳回 NDIS 之後,呼叫管理員應該不會對此呼叫採取進一步的動作來設定它。 ProtocolCmMakeCall 負責建立連線,讓用戶端可以透過此 VC 上的網路進行數據傳輸。 不過,後續可以呼叫呼叫管理員來修改呼叫的服務品質,以新增或卸除這為多點 VC,最後終止此呼叫。

例子

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

例如,若要定義名為 「 MyCmMakeCall」 的 ProtocolCmMakeCall 函式,請使用 PROTOCOL_CM_MAKE_CALL 類型,如下列程式碼範例所示:

PROTOCOL_CM_MAKE_CALL MyCmMakeCall;

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

_Use_decl_annotations_
NDIS_STATUS
 MyCmMakeCall(
    NDIS_HANDLE  CallMgrVcContext,
    PCO_CALL_PARAMETERS  CallParameters,
    NDIS_HANDLE  NdisPartyHandle,
    PNDIS_HANDLE  CallMgrPartyContext
    )
  {...}

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

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

規格需求

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

另請參閱

NdisClMakeCall

NdisCmActivateVc

NdisCmMakeCallComplete

ProtocolCoCreateVc