Registrar y abrir una familia de direcciones
Un administrador de llamadas debe registrar una familia de direcciones para cada NIC en la que proporciona servicios de administrador de llamadas a clientes orientados a la conexión. Del mismo modo, un controlador MCM debe registrar una familia de direcciones para la NIC que administra.
Al registrar una familia de direcciones, un administrador de llamadas o un controlador MCM hace que NDIS anuncie los servicios del controlador de MCM o del administrador de llamadas a todos los clientes orientados a la conexión que se enlazan al adaptador.
Si un cliente orientado a la conexión puede usar los servicios anunciados por un administrador de llamadas o un controlador MCM, puede abrir una familia de direcciones con el administrador de llamadas o el controlador MCM.
Una vez que su función ProtocolBindAdapterEx se enlaza a un controlador de miniport subyacente con NdisOpenAdapterEx, un administrador de llamadas llama a NdisCmRegisterAddressFamilyEx para registrar una familia de direcciones para el enlace (consulte la figura siguiente).
La llamada a NdisCmRegisterAddressFamilyEx anuncia los servicios de señalización específicos del administrador de llamadas. Un administrador de llamadas debe registrar una familia de direcciones cada vez que se llama a su función ProtocolBindAdapterEx y se enlaza correctamente a una NIC con NdisOpenAdapterEx.
El administrador de llamadas puede admitir más de una familia de direcciones en todos los controladores de minipuerto a los que está enlazado. El administrador de llamadas también puede admitir más de una familia de direcciones en una sola NIC a la que está enlazada. El administrador de llamadas debe registrar los mismos puntos de entrada para cada familia de direcciones en el enlace. Solo un administrador de llamadas puede admitir un tipo determinado de familia de direcciones para los clientes enlazados a cualquier controlador de miniporte determinado. Para obtener más información sobre cómo registrar puntos de entrada para un administrador de llamadas, vea Registro de CoNDIS.
Un controlador MCM llama a NdisMCmRegisterAddressFamilyEx desde su función MiniportInitializeEx después de registrar sus puntos de entrada del controlador de miniport con NdisMRegisterMiniportDriver. Para obtener más información sobre los puntos de entrada de regsitering, consulte Registro de CoNDIS. Un controlador MCM llama a NdisMCmRegisterAddressFamilyEx una vez para anunciar sus servicios a clientes orientados a la conexión (consulte la ilustración siguiente).
Un controlador de minipuerto de una NIC que tenga compatibilidad con señalización orientada a conexiones a bordo puede registrarse como un controlador MCM aunque un administrador de llamadas esté disponible. Al hacerlo, este tipo de controlador MCM adelanta al administrador de llamadas como administrador de llamadas para esa NIC.
La llamada del administrador de llamadas o del controlador MCM a Ndis(M)CmRegisterAddressFamily hace que NDIS llame a la función ProtocolCoAfRegisterNotify de cada cliente orientado a la conexión en el enlace (como se muestra en dos figuras anteriores).
ProtocolCoAfRegisterNotify examina los datos de la familia de direcciones para determinar si el cliente puede usar los servicios de este controlador CM o MCM concreto. Si el cliente puede realizar modificaciones en los datos de la familia de direcciones proporcionadas por CM (M) depende de la compatibilidad concreta del protocolo de señalización del administrador de llamadas o del controlador MCM.
Si el cliente encuentra aceptables los servicios de administración de llamadas ofrecidos, ProtocolCoAfRegisterNotify asigna un área de contexto por AF para el cliente y llama a NdisClOpenAddressFamilyEx. NdisClOpenAddressFamilyEx no registra los puntos de entrada orientados a la conexión del cliente con NDIS. Para obtener más información sobre cómo registrar puntos de entrada orientados a la conexión con NDIS, vea Registro de CoNDIS.
La llamada a NdisClOpenAddressFamilyEx hace que NDIS llame a la función ProtocolCmOpenAf del controlador mcM o del administrador de llamadas (como se muestra ya en las dos cifras anteriores). ProtocolCmOpenAf garantiza que el cliente pasado en una familia de direcciones válida y asigna e inicializa los recursos necesarios para realizar operaciones en nombre del cliente que abre esta instancia de la familia de direcciones. ProtocolCmOpenAf también almacena un NDIS suministrado por NdisAfHandle que representa la asociación entre el administrador de llamadas y el cliente para la familia de direcciones abiertas.
ProtocolCmOpenAf puede completarse de forma sincrónica o asincrónica. Para completar de forma asincrónica, la función ProtocolCmOpenAf de un administrador de llamadas llama a NdisCmOpenAddressFamilyComplete; La función ProtocolCmOpenAf de un controlador MCM llama a NdisMCmOpenAddressFamilyComplete. La llamada a Ndis(M)CmOpenAddressFamilyComplete hace que NDIS llame a la función ProtocolOpenAfComplete del cliente que originalmente llamó a NdisClOpenAddressFamilyEx.
Si la llamada del cliente a NdisClOpenAddressFamilyEx se realiza correctamente, NDIS vuelve al cliente un NdisAfHandle que representa la asociación entre el administrador de llamadas y el cliente para la familia de direcciones abiertas.
Si un cliente acepta llamadas entrantes, normalmente registra una o varias SAP desde su función ProtocolClOpenAfCompleteEx llamando a NdisClRegisterSap después de su llamada correcta a NdisClOpenAddressFamilyEx.
Si un cliente realiza llamadas salientes, podría crear una o varias máquinas virtuales en su función ProtocolClOpenAfCompleteEx en previsión de una solicitud realizada por uno o varios clientes para realizar una llamada saliente.