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
返回时,指定呼叫管理器提供的上下文区域的句柄,其中呼叫管理器维护多点调用中初始参与方的状态。 如果 NdisPartyHandle 为 NULL,则此句柄必须设置为 NULL。
返回值
ProtocolCmMakeCall 将 () 的操作状态作为以下值之一返回:
返回代码 | 说明 |
---|---|
|
指示呼叫管理器已成功分配进行呼叫所需的资源,并且能够激活与微型端口驱动程序的虚拟连接。 |
|
指示调用管理器将完成异步调用的请求。 当调用管理器已完成呼叫的所有操作后,它必须调用 NdisCmMakeCallComplete 以向 NDIS 发出此调用已完成的信号。 |
|
指示调用管理器无法分配和/或初始化其资源,以便根据客户端的请求激活虚拟连接。 |
|
指示调用管理器无法激活虚拟连接,因为调用方在 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 |