PROTOCOL_CM_MAKE_CALL回调函数 (ndis.h)
ProtocolCmMakeCall 函数是设置虚拟连接(VC)的媒体特定参数并激活虚拟连接的必需函数。
语法
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 将作的状态作为以下值之一返回:
返回代码 | 描述 |
---|---|
|
指示呼叫管理器已成功分配必要的资源进行呼叫,并且能够激活与微型端口驱动程序的虚拟连接。 |
|
指示调用管理器将完成异步调用的请求。 当呼叫管理器完成呼叫的所有作后,它必须调用 NdisCmMakeCallComplete,以向 NDIS 发出此调用已完成的信号。 |
|
指示调用管理器无法分配和/或初始化其资源,以激活客户端请求的虚拟连接。 |
|
指示调用管理器无法激活虚拟连接,因为调用方请求调用参数中的功能无效或不可用,CallParameters 指定的调用参数。 |
言论
如果 向 protocolCmMakeCall 提供显式 NdisPartyHandle,则此 VC 是由客户端为多点调用创建的。 调用管理器必须分配和初始化维护状态信息和控制多点调用所需的任何必要资源。 此类资源包括但不限于内存缓冲区、数据结构、事件和其他类似资源。 如果调用管理器无法为其状态区域分配或初始化所需的资源,则应使用NDIS_STATUS_RESOURCES将控制权返回到 NDIS。
ProtocolCmMakeCall 根据需要与网络控制设备或其他特定于媒体的参与者通信,以便根据 CallParameters 指定的调用参数在本地节点和远程节点之间建立连接。 此类作包括但不限于与切换硬件的通信、与网络控制站的通信,或适用于网络媒体的其他作。
如果调用管理器需要与网络硬件(如网络交换机)通信,则应使用与在其 ProtocolBindAdapterEx 函数中建立的网络控制设备的虚拟连接。 呼叫管理员通过微型端口驱动程序与其网络硬件通信,方法是调用 NdisCoSendNetBufferLists。 具有集成呼叫管理支持的微型端口驱动程序不会调用 NdisCoSendNetBufferLists,而是会自行传输数据。
呼叫管理器按照其中等要求与网络硬件进行所有必要的通信后,呼叫经理必须调用 NdisCmActivateVc。
如果此调用是多点呼叫,在呼叫管理器与网络硬件通信、已验证的调用参数并分配和初始化其每方状态数据之后,应在将控制权返回到 NDIS 之前,在 handle CallMgrPartyContext 中设置其状态块的地址。 句柄是通过取消引用句柄并将指向状态块的指针存储为句柄的值来设置的。 例如:
*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的信息,请参阅 批注函数行为。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows Vista 中支持 NDIS 6.0 和 NDIS 5.1 驱动程序(请参阅 ProtocolCmMakeCall (NDIS 5.1) 。 支持 NDIS 5.1 驱动程序(请参阅 Windows XP 中的 ProtocolCmMakeCall (NDIS 5.1)。 |
目标平台 | 窗户 |
标头 | ndis.h (包括 Ndis.h) |
IRQL | <= DISPATCH_LEVEL |