Compartir a través de


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

Los clientes NDIS orientados a la conexión usan la función ProtocolClMakeCallComplete que realizan llamadas salientes. Estos clientes deben tener funciones protocolClMakeCallComplete para completar las operaciones asincrónicas que inician con NdisClMakeCall. De lo contrario, tal controlador de protocolo registrado protocolClMakeCallComplete función puede simplemente devolver el control.

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

Sintaxis

PROTOCOL_CL_MAKE_CALL_COMPLETE ProtocolClMakeCallComplete;

void ProtocolClMakeCallComplete(
  [in]           NDIS_STATUS Status,
  [in]           NDIS_HANDLE ProtocolVcContext,
  [in, optional] NDIS_HANDLE NdisPartyHandle,
  [in]           PCO_CALL_PARAMETERS CallParameters
)
{...}

Parámetros

[in] Status

Especifica el estado final de la llamada original del cliente a NdisClMakeCall, que puede ser uno de los siguientes:

NDIS_STATUS_SUCCESS

El intento del cliente de configurar una conexión virtual se realizó correctamente. Por lo tanto, el cliente puede continuar realizando transferencias en el VC activo mediante el NdisVcHandle devuelto por NdisCoCreateVc, que el cliente ha almacenado en su área de contexto por VC en ProtocolVcContext .

NDIS_STATUS_RESOURCES

NDIS, el administrador de llamadas o un controlador subyacente no pudieron asignar recursos suficientes para configurar la conexión.

NDIS_STATUS_XXX

El administrador de llamadas o el controlador de miniport subyacente no pudieron establecer una conexión activa y NDIS propagó este estado de error determinado por el controlador al cliente.

[in] ProtocolVcContext

Especifica el identificador del área de contexto por VC del cliente, que el cliente proporcionó originalmente a NDIS cuando llamó a NdisCoCreateVc para configurar el VC para su llamada saliente.

[in, optional] NdisPartyHandle

Si estado es NDIS_STATUS_SUCCESS y el cliente creó un VC de varios puntos pasando un identificador de ProtocolPartyContext explícito a NdisClMakeCall, se trata de un NdisPartyHandle válido. De lo contrario, este parámetro es NULL.

ProtocolClMakeCallComplete debe guardar cualquier entrada válida NdisPartyHandle, normalmente en el área de contexto por parte del cliente. El cliente debe usar este identificador si (o cuándo) realiza una llamada posterior a NdisClDropParty o NdisClCloseCall que hace referencia a esta entidad.

[in] CallParameters

Puntero a una estructura de CO_CALL_PARAMETERS almacenada en búfer. El cliente asignó este búfer e inicializó esta estructura con datos determinados por el cliente antes de pasar este puntero a NdisClMakeCall. Al procesar la solicitud del cliente, el administrador de llamadas puede modificar estos datos para reflejar los resultados de su negociación con la red o con un emparejamiento de señalización.

Valor devuelto

Ninguno

Observaciones

Una llamada a ProtocolClMakeCallComplete indica que el administrador de llamadas ha completado el procesamiento de la solicitud del cliente para establecer una conexión virtual con NdisClMakeCall.

Si el intento del cliente de establecer una llamada saliente no es correcta (la entrada Estado es cualquier cosa excepto NDIS_STATUS_SUCCESS), ProtocolClMakeCallComplete debe hacer lo siguiente:

  • Libere o prepare para reutilizar el área de ProtocolPartyContext, si existe, y el búfer en CallParameters que asignó el cliente.
  • Descomprima el VC creado por el cliente con una llamada a NdisCoDeleteVc y suelte o prepare para reutilizar el área de ProtocolVcContext asignada por el cliente.
De lo contrario, protocolClMakeCallComplete debe hacer lo siguiente:
  1. Compruebe el miembro Flags de la estructura en CallParameters para ver si CALL_PARAMETERS_CHANGED está establecido, lo que indica que el administrador de llamadas modificó los parámetros de llamada proporcionados por el cliente.
  2. Si es así, examine los datos en CallParameters para determinar si son aceptables para esta conexión.

    Por ejemplo, el cliente puede conservar los parámetros de llamada almacenados en búfer para la vc activa, guardar el NdisPartyHandle si se trata de un VC de varios puntos y, por lo general, hacer que el cliente esté listo para transferencias posteriores y otras operaciones en la vc activa si encuentra que los parámetros de llamada especificados son satisfactorios.

  3. Si no es así, el protocolo de señalización determina si el cliente puede intentar renegociar los parámetros de llamada aceptables con el administrador de llamadas.

    Por ejemplo, un administrador de llamadas determinado podría permitir que sus clientes llamen a NdisClModifyCallQoS una o varias veces en estas circunstancias.

  4. Si los parámetros de llamada modificados por CM son inaceptables y es imposible renegociar aún más, ProtocolClMakeCallComplete debe anular la llamada con NdisClCloseCall.

    En este caso, protocolClMakeCallComplete no debe intentar liberar los recursos asignados por el cliente a cambio de NdisClCloseCall, pero simplemente puede devolver el control. En su lugar, el cliente debe liberar los recursos asignados (o prepararlos para su reutilización) dentro de su función ProtocolClCloseCallComplete.

Ejemplos de

Para definir una función ProtocolClMakeCallComplete, 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 ProtocolClMakeCallComplete función denominada "MyClMakeCallComplete", use el tipo PROTOCOL_CL_MAKE_CALL_COMPLETE tal como se muestra en este ejemplo de código:

PROTOCOL_CL_MAKE_CALL_COMPLETE MyClMakeCallComplete;

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

_Use_decl_annotations_
VOID
 MyClMakeCallComplete(
    NDIS_STATUS  Status,
    NDIS_HANDLE  ProtocolVcContext,
    NDIS_HANDLE  NdisPartyHandle,
    PCO_CALL_PARAMETERS  CallParameters
    )
  {...}

El tipo de función PROTOCOL_CL_MAKE_CALL_COMPLETE 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_CL_MAKE_CALL_COMPLETE 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 ProtocolClMakeCallComplete (NDIS 5.1)) en Windows Vista. Compatible con controladores NDIS 5.1 (consulte ProtocolClMakeCallComplete (NDIS 5.1)) en Windows XP.
de la plataforma de destino de Windows
encabezado de ndis.h (incluya Ndis.h)
irQL <= DISPATCH_LEVEL

Consulte también

CO_CALL_PARAMETERS

NdisClCloseCall

NdisClDropParty

NdisClMakeCall

NdisCmMakeCallComplete

NdisCoCreateVc

NdisCoDeleteVc

NdisFreeMemory

NdisFreeToNPagedLookasideList

NdisMCmMakeCallComplete

protocolClCloseCallComplete

ProtocolCmMakeCall de