Differences in Initialization
A call manager is an NDIS protocol; therefore, it follows the initialization sequence for a connection-oriented protocol, but with one additional step. In its ProtocolBindAdapterEx handler, immediately after completing the initialization steps for a connection-oriented protocol, a call manager must register an address family by calling NdisCmRegisterAddressFamilyEx. The call to NdisCmRegisterAddressFamilyEx, in which a call manager registers its call manager functions, identifies the protocol as a call manager. The call manager must register an address family for each NIC to which it binds itself.
An MCM driver is a miniport driver; therefore, it follows the initialization sequence for a connection-oriented miniport driver with the addition of the following step: an MCM driver must register an address family by calling NdisMCmRegisterAddressFamilyEx in its MiniportInitializeEx function, immediately after completing the miniport driver initialization sequence . The call to NdisMCmRegisterAddressFamilyEx, in which an MCM driver registers its call manager functions, distinguishes the MCM driver from a regular connection-oriented miniport driver. Although an MCM driver registers its miniport driver handlers only once during initialization by calling NdisMRegisterMiniportDriver, it must call NdisMCmRegisterAddressFamilyEx once for each NIC that it controls.