PROTOCOL_CM_MAKE_CALL función de devolución de llamada (ndis.h)

La función ProtocolCmMakeCall es una función necesaria que configura parámetros específicos de medios para una conexión virtual (VC) y activa la conexión virtual.

Nota Debe declarar la función mediante el tipo PROTOCOL_CM_MAKE_CALL . Para obtener más información, consulte la sección Ejemplos siguientes.
 

Sintaxis

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
)
{...}

Parámetros

[in] CallMgrVcContext

Especifica el identificador de un área de contexto asignada por el administrador de llamadas en la que los administradores de llamadas mantienen su estado por VC. El administrador de llamadas proporcionó este identificador a NDIS desde su función ProtocolCoCreateVc .

[in, out] CallParameters

Puntero a una estructura de CO_CALL_PARAMETERS que contiene los parámetros, especificados por un cliente orientado a la conexión, para esta llamada saliente.

[in, optional] NdisPartyHandle

Especifica un identificador, proporcionado por NDIS, que identifica de forma única la entidad inicial en la conexión virtual de varios puntos. Este identificador es opaco para el administrador de llamadas y está reservado para el uso de la biblioteca NDIS. Este identificador es NULL si el cliente no configura una llamada de punto múltiple saliente.

[out, optional] CallMgrPartyContext

En la devolución, especifica un identificador para un área de contexto proporcionada por el administrador de llamadas en la que el administrador de llamadas mantiene el estado sobre la entidad inicial en la llamada multipunto. Si NdisPartyHandle es NULL, este identificador debe establecerse en NULL.

Valor devuelto

ProtocolCmMakeCall devuelve el estado de sus operaciones como uno de los valores siguientes:

Código devuelto Descripción
NDIS_STATUS_SUCCESS
Indica que el administrador de llamadas asignó correctamente los recursos necesarios para realizar la llamada y pudo activar la conexión virtual con el controlador de miniport.
NDIS_STATUS_PENDING
Indica que el administrador de llamadas completará la solicitud para realizar una llamada de forma asincrónica. Cuando el administrador de llamadas ha completado todas las operaciones para realizar una llamada, debe llamar a NdisCmMakeCallComplete para indicar a NDIS que se ha completado esta llamada.
NDIS_STATUS_RESOURCES
Indica que el administrador de llamadas no pudo asignar o inicializar sus recursos para activar la conexión virtual según lo solicite el cliente.
NDIS_STATUS_NOT_SUPPORTED
Indica que el administrador de llamadas no pudo activar una conexión virtual porque el autor de la llamada solicitó características no válidas o no disponibles en los parámetros de llamada especificados en CallParameters .

Comentarios

Si ProtocolCmMakeCall recibe un NdisPartyHandle explícito, el cliente creó esta credencial verificable para una llamada multipunto. El administrador de llamadas debe asignar e inicializar los recursos necesarios para mantener la información de estado y controlar una llamada multipunto. Estos recursos incluyen, entre otros, búferes de memoria, estructuras de datos, eventos y otros recursos similares. Si el administrador de llamadas no puede asignar ni inicializar los recursos necesarios para sus áreas de estado, debe devolver el control a NDIS con NDIS_STATUS_RESOURCES.

ProtocolCmMakeCall se comunica con dispositivos de control de red u otros actores específicos de medios, según sea necesario, para establecer una conexión entre el nodo local y un nodo remoto en función de los parámetros de llamada especificados en CallParameters . Estas acciones podrían incluir, entre otras, la comunicación con hardware de conmutación, comunicaciones con una estación de control de red u otras acciones según corresponda al medio de red.

Si se requiere un administrador de llamadas para comunicarse con hardware de red (como un conmutador de red), debe usar una conexión virtual al dispositivo de control de red que estableció en su función ProtocolBindAdapterEx . Los administradores de llamadas se comunican con su hardware de red a través del controlador de minipuerto llamando a NdisCoSendNetBufferLists. Los controladores de minipuerto con soporte integrado de administración de llamadas no llamarán a NdisCoSendNetBufferLists, sino que transmitirán los propios datos.

Después de que un administrador de llamadas haya realizado toda la comunicación necesaria con su hardware de red según lo requiera su medio, los administradores de llamadas deben llamar a NdisCmActivateVc.

Si esta llamada era una llamada multipunto, después de que el administrador de llamadas se haya comunicado con el hardware de red, los parámetros de llamada comprobados y asignados e inicializados sus datos de estado por parte, la dirección de su bloque de estado debe establecerse en el identificador CallMgrPartyContext antes de devolver el control a NDIS. El identificador se establece desreferenciando el identificador y almacenando un puntero al bloque de estado como el valor del identificador. Por ejemplo:

*CallMgrPartyContext = SomeBuffer ;

Si ProtocolCmMakeCall ha completado las operaciones necesarias para su red y la credencial verificable se ha activado correctamente a través de NdisCmActivateVc, ProtocolCmMakeCall debe devolver el control lo antes posible con un estado de STATUS_SUCCESS.

Después de que ProtocolCmMakeCall devuelva el control a NDIS, el administrador de llamadas debe esperar no realizar ninguna otra acción en esta llamada para configurarla. ProtocolCmMakeCall es responsable de establecer la conexión para que el cliente pueda realizar transferencias de datos a través de la red en esta credencial verificable. Sin embargo, se puede llamar al administrador de llamadas posteriormente para modificar la calidad de servicio de la llamada, para agregar o quitar partes si se trata de un VC de punto múltiple y, finalmente, para finalizar esta llamada.

Ejemplos

Para definir una función ProtocolCmMakeCall , primero debe proporcionar una declaración de función que identifique el tipo de función que va a definir. Windows proporciona un conjunto de tipos de función para controladores. Declarar una función mediante los tipos de función ayuda a Code Analysis for Drivers, Static Driver Verifier (SDV) y otras herramientas de comprobación a encontrar errores y es un requisito para escribir controladores para el sistema operativo Windows.

Por ejemplo, para definir una función ProtocolCmMakeCall denominada "MyCmMakeCall", use el tipo de PROTOCOL_CM_MAKE_CALL como se muestra en este ejemplo de código:

PROTOCOL_CM_MAKE_CALL MyCmMakeCall;

A continuación, implemente la función de la siguiente manera:

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

El tipo de función PROTOCOL_CM_MAKE_CALL se define en el archivo de encabezado Ndis.h. Para identificar con más precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación Use_decl_annotations a la definición de función. La anotación Use_decl_annotations garantiza que se usen las anotaciones que se aplican al tipo de función PROTOCOL_CM_MAKE_CALL en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, consulte Declaración de funciones mediante el uso de tipos de roles de función para controladores NDIS.

Para obtener información sobre Use_decl_annotations, consulte Anotación del comportamiento de la función.

Requisitos

Requisito Value
Cliente mínimo compatible Compatible con los controladores NDIS 6.0 y NDIS 5.1 (consulte ProtocolCmMakeCall (NDIS 5.1)) en Windows Vista. Compatible con los controladores NDIS 5.1 (consulte ProtocolCmMakeCall (NDIS 5.1)) en Windows XP.
Plataforma de destino Windows
Encabezado ndis.h (incluya Ndis.h)
IRQL <= DISPATCH_LEVEL

Consulte también

NdisClMakeCall

NdisCmActivateVc

NdisCmMakeCallComplete

ProtocolCoCreateVc