Различия в инициализации
Диспетчер вызовов является протоколом NDIS; Поэтому он следует последовательности инициализации для протокола, ориентированного на подключение, но с одним дополнительным шагом. В обработчике ProtocolBindAdapterEx сразу после выполнения шагов инициализации для протокола, ориентированного на подключение, диспетчер вызовов должен зарегистрировать семейство адресов, вызвав NdisCmRegisterAddressFamilyEx. Вызов NdisCmRegisterAddressFamilyEx, в котором диспетчер вызовов регистрирует свои функции диспетчера вызовов, определяет протокол как диспетчер вызовов. Диспетчер вызовов должен зарегистрировать семейство адресов для каждой сетевой карты, к которой он привязывается.
Драйвер MCM — это драйвер мини-порта; Поэтому он следует последовательности инициализации для драйвера мини-порта, ориентированного на подключение, с добавлением следующего шага: драйвер MCM должен зарегистрировать семейство адресов, вызвав NdisMCmRegisterAddressFamilyEx в своей функции MiniportInitializeEx сразу после завершения последовательности инициализации драйвера мини-порта . Вызов NdisMCmRegisterAddressFamilyEx, в котором драйвер MCM регистрирует свои функции диспетчера вызовов, отличает драйвер MCM от обычного драйвера мини-порта, ориентированного на подключение. Хотя драйвер MCM регистрирует обработчики драйверов мини-портов только один раз во время инициализации, вызывая NdisMRegisterMiniportDriver, он должен вызывать NdisMCmRegisterAddressFamilyEx один раз для каждого сетевого адаптера, которым он управляет.