NdisCmRegisterAddressFamily function

Note   NDIS 5. x has been deprecated and is superseded by NDIS 6. x. For new NDIS driver development, see Network Drivers Starting with Windows Vista. For information about porting NDIS 5. x drivers to NDIS 6. x, see Porting NDIS 5.x Drivers to NDIS 6.0.

NdisCmRegisterAddressFamily registers a set of call manager-supplied functions for connection-oriented communication over a CM-specified address family.

Syntax

NDIS_STATUS NdisCmRegisterAddressFamily(
  _In_ NDIS_HANDLE                        NdisBindingHandle,
  _In_ PCO_ADDRESS_FAMILY                 AddressFamily,
  _In_ PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
  _In_ UINT                               SizeOfCmCharacteristics
);

Parameters

  • NdisBindingHandle [in]
    Specifies the handle returned by NdisOpenAdapter that identifies the target NIC or the virtual adapter of the next-lower driver to which the caller is bound.

  • AddressFamily [in]
    Pointer to a structure of type CO_ADDRESS_FAMILY identifying the call manager and the address family it supports for this binding.

    The given AddressFamily becomes an input parameter to the ProtocolCoAfRegisterNotify functions of all clients bound to the same connection-oriented miniport driver.

  • CmCharacteristics [in]
    Pointer to an NDIS_CALL_MANAGER_CHARACTERISTICS structure set up by the caller. The structure at CmCharacteristics is defined as follows:

    typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS {
        UCHAR  MajorVersion;
        UCHAR  MinorVersion;
        USHORT  Filler;           // reserved for system use
        UINT    Reserved;         // reserved for system use
        CO_CREATE_VC_HANDLER  CmCreateVcHandler;
        CO_DELETE_VC_HANDLER  CmDeleteVcHandler;
        CM_OPEN_AF_HANDLER  CmOpenAfHandler;
        CM_CLOSE_AF_HANDLER  CmCloseAfHandler;
        CM_REG_SAP_HANDLER  CmRegisterSapHandler;
        CM_DEREG_SAP_HANDLER  CmDeregisterSapHandler;
        CM_MAKE_CALL_HANDLER  CmMakeCallHandler;
        CM_CLOSE_CALL_HANDLER  CmCloseCallHandler;
        CM_INCOMING_CALL_COMPLETE_HANDLER
                                 CmIncomingCallCompleteHandler;
        CM_ADD_PARTY_HANDLER  CmAddPartyHandler;
        CM_DROP_PARTY_HANDLER  CmDropPartyHandler;
        CM_ACTIVATE_VC_COMPLETE_HANDLER  CmActivateVcCompleteHandler;
        CM_DEACTIVATE_VC_COMPLETE_HANDLER
                                 CmDeactivateVcCompleteHandler; 
        CM_MODIFY_CALL_QOS_HANDLER  CmModifyCallQoSHandler;
        CO_REQUEST_HANDLER  CmRequestHandler;
        CO_REQUEST_COMPLETE_HANDLER  CmRequestCompleteHandler;
    } NDIS_CALL_MANAGER_CHARACTERISTICS,
                       *PNDIS_CALL_MANAGER_CHARACTERISTICS;
    

    The protocol should initialize this structure with zeros before setting up the following members:

    • MajorVersion
      Specifies the major version of this structure that the call manager is using. The current value is 0x05.

    • MinorVersion
      Specifies the major version of this structure that the call manager is using. The current value is 0x00.

    • filler and Reserved
      The caller should ignore these members after zero-initializing this structure.

    • CmCreateVcHandler
      Specifies the entry point of the caller's ProtocolCoCreateVc function.

    • CmDeleteVcHandler
      Specifies the entry point of the caller's ProtocolCoDeleteVc function.

    • CmOpenAfHandler
      Specifies the entry point of the caller's ProtocolCmOpenAf function.

    • CmCloseAfHandler
      Specifies the entry point of the caller's ProtocolCmCloseAf function.

    • CmRegisterSapHandler
      Specifies the entry point of the caller's ProtocolCmRegisterSap function.

    • CmDeregisterSapHandler
      Specifies the entry point of the caller's ProtocolCmDeregisterSap function.

    • CmMakeCallHandler
      Specifies the entry point of the caller's ProtocolCmMakeCall function.

    • CmCloseCallHandler
      Specifies the entry point of the caller's ProtocolCmCloseCall function.

    • CmIncomingCallCompleteHandler
      Specifies the entry point of the caller's ProtocolCmIncomingCallComplete function.

    • CmAddPartyHandler
      Specifies the entry point of the caller's ProtocolCmAddParty function.

    • CmDropPartyHandler
      Specifies the entry point of the caller's ProtocolCmDropParty function.

    • CmActivateVcCompleteHandler
      Specifies the entry point of the caller's ProtocolCmActivateVcComplete function.

    • CmDeactivateVcCompleteHandler
      Specifies the entry point of the caller's ProtocolCmDeactivateVcComplete function.

    • CmModifyCallQoSHandler
      Specifies the entry point of the caller's ProtocolCmModifyCallQoS function.

    • CmRequestHandler
      Specifies the entry point of the caller's ProtocolCoRequest function.

    • CmRequestCompleteHandler
      Specifies the entry point of the caller's ProtocolCoRequestComplete function.

  • SizeOfCmCharacteristics [in]
    Specifies the size in bytes of the structure at CmCharacteristics.

Return value

NdisCmRegisterAddressFamily can return any of the following:

Return code Description
NDIS_STATUS_SUCCESS

The protocol has been registered with NDIS as the call manager for the given address family, so NDIS will call the ProtocolCoAfRegisterNotify functions of all clients that bind themselves to the same NIC driver.

NDIS_STATUS_RESOURCES

The requested operation failed because NDIS could not allocate sufficient memory or initialize the state it uses to track the call manager or this address family

NDIS_STATUS_FAILURE

NDIS failed this call, possibly for one of the following reasons:

  • This caller was not registered as a connection-oriented protocol.

  • The NIC driver to which the caller is bound was not registered as a connection-oriented miniport driver.

  • Another call manager has already registered this address family.

  • The caller supplied invalid or insufficient information at CmCharacteristics.

  • The caller's binding is being closed.

 

Remarks

Only stand-alone call managers, which register themselves as NDIS protocol drivers with NdisRegisterProtocol, also call NdisCmRegisterAddressFamily. Such a driver calls NdisCmRegisterAddressFamily from its ProtocolBindAdapter function to register itself on a particular binding with NDIS.

A stand-alone call manager's ProtocolBindAdapter function first establishes the binding to the underlying miniport driver with NdisOpenAdapter before it calls NdisCmRegisterAddressFamily. Each time NDIS calls ProtocolBindAdapter with another BindContext handle, this call manager function establishes a binding and registers an address family that it supports. In other words, a stand-alone call manager eventually registers an address family and reregisters its ProtocolCm/CoXxx functions for each NIC on which it provides call-management services to connection-oriented clients. The call manager can support more than one address family across all the NIC drivers to which it is bound. The call manager can also support more than one address family on a single NIC to which it is bound. In this case, however, the call manager must register the same entry points for each address family on the binding. Only one call manager can support a particular type of address family for clients bound to any particular NIC driver.

In effect, such a protocol driver both registers itself as a stand-alone call manager and advertises its specific signaling services for all clients bound to the same miniport driver when it calls NdisCmRegisterAddressFamily. After its ProtocolBindAdapter returns control with a successful registration as a stand-alone call manager, NDIS calls the ProtocolCoAfRegisterNotify functions of all clients bound to the same miniport driver. These clients, in turn, cause NDIS to call the ProtocolCmOpenAf function that the call manager just registered for the address family.

A stand-alone call manager must set every CmXxx member in the NDIS_CALL_MANAGER_CHARACTERISTICS structure to a driver-supplied ProtocolCm/CoXxx function when it calls NdisCmRegisterAddressFamily, even if it does not support incoming calls, outgoing calls, or point-to-multipoint connections. For whatever subset of connection-oriented functionality that such a call manager does not support, its ProtocolCmXxx functions simply return NDIS_STATUS_NOT_SUPPORTED.

After a stand-alone call manager calls NdisCmRegisterAddressFamily successfully, NDIS ignores any entry point(s) that the CM previously specified in the RequestHandler and RequestCompleteHandler members of the NDIS_PROTOCOL_CHARACTERISTICS structure that it passed to NdisRegisterProtocol.

By contrast to stand-alone call managers, a connection-oriented miniport driver that provides integrated call-management support, also called an MCM driver, would call NdisMCmRegisterAddressFamily to register its ProtocolCmXxx and ProtocolCoXxx driver functions with NDIS. Such a miniport driver never calls NdisRegisterProtocol or NdisOpenAdapter.

Callers of NdisCmRegisterAddressFamily usually run at IRQL = PASSIVE_LEVEL and in the context of a system thread. NdisCmRegisterAddressFamily must be called at IRQL < DISPATCH_LEVEL.

Requirements

Target platform

Universal

Version

Not supported for NDIS 6.0 drivers in Windows Vista. Use NdisCmRegisterAddressFamilyEx instead. Not applicable for NDIS 5.1 drivers in Windows Vista, but supported for NDIS 5.1 drivers in Windows XP.

Header

Ndis.h (include Ndis.h)

Library

Ndis.lib

IRQL

< DISPATCH_LEVEL (See Remarks section)

See also

CO_ADDRESS_FAMILY

NdisMCmRegisterAddressFamily

NdisOpenAdapter

NdisRegisterProtocol

NdisZeroMemory

ProtocolBindAdapter

ProtocolCmActivateVcComplete

ProtocolCmAddParty

ProtocolCmCloseAf

ProtocolCmCloseCall

ProtocolCmDeactivateVcComplete

ProtocolCmDeregisterSap

ProtocolCmDropParty

ProtocolCmIncomingCallComplete

ProtocolCmMakeCall

ProtocolCmModifyCallQoS

ProtocolCmOpenAf

ProtocolCmRegisterSap

ProtocolCoAfRegisterNotify

ProtocolCoCreateVc

ProtocolCoDeleteVc

ProtocolCoRequest

ProtocolCoRequestComplete

 

 

Send comments about this topic to Microsoft