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.
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 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 varios puntos salientes.
[out, optional] CallMgrPartyContext
A cambio, 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 de varios puntos. Si NdisPartyHandle es NULL, este identificador debe establecerse en null.
Valor devuelto
ProtocolCmMakeCall devuelve el estado de sus operaciones como uno de los siguientes valores:
Código devuelto | Descripción |
---|---|
|
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. |
|
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. |
|
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. |
|
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 . |
Observaciones
Si protocolCmMakeCall recibe un NdisPartyHandle explícito, el cliente creó este VC para una llamada de varios puntos. El administrador de llamadas debe asignar e inicializar los recursos necesarios para mantener la información de estado y controlar una llamada de varios puntos. 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 (por ejemplo, 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 miniport mediante una llamada a NdisCoSendNetBufferLists. Los controladores de miniport con compatibilidad integrada con la 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 de varios puntos, 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 ProtocolCmMakeCall devuelve el control a NDIS, el administrador de llamadas debe esperar no realizar más acciones en esta llamada para configurarlo. ProtocolCmMakeCall es responsable de establecer la conexión para que el cliente pueda realizar transferencias de datos a través de la red en este VC. Sin embargo, se puede llamar al administrador de llamadas posteriormente para modificar la calidad de servicio de la llamada, agregar o quitar partes si se trata de un VC de varios puntos y, finalmente, finalizar esta llamada.
Ejemplos de
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 análisis de código para controladores, comprobador de controladores estáticos (SDV) y otras herramientas de comprobación encuentran errores y es un requisito para escribir controladores para el sistema operativo Windows.Por ejemplo, para definir un ProtocolCmMakeCall función denominada "MyCmMakeCall", use el tipo PROTOCOL_CM_MAKE_CALL tal 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, vea 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, vea Anotación del comportamiento de la función.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Compatible con 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. |
de la plataforma de destino de | Windows |
encabezado de | ndis.h (incluya Ndis.h) |
irQL | <= DISPATCH_LEVEL |