Выделение порта NDIS
Чтобы выделить порт NDIS для адаптера мини-порта, драйвер мини-порта вызывает функцию NdisMAllocatePort . NdisMAllocatePort является синхронным и возвращается после того, как NDIS успешно выделяет ресурсы, необходимые для порта.
Прежде чем драйвер мини-порта вызовет NdisMAllocatePort, драйвер должен вызвать функцию NdisMSetMiniportAttributes , чтобы задать атрибуты в структуре NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES . Драйверы miniport могут вызывать NdisMAllocatePort для адаптера мини-порта после успешного вызова NdisMSetMiniportAttributes и до того, как NDIS вызовет функцию MiniportHaltEx для этого адаптера мини-порта.
NDIS всегда выделяет порт по умолчанию (ноль порта), поэтому драйверы мини-портов не должны выделять порт по умолчанию. NDIS освобождает порт по умолчанию после возврата драйвера мини-порта в формате MiniportHaltEx.
NDIS назначает номер порта порту, когда драйвер минипорта вызывает NdisMAllocatePort. Драйвер указывает характеристики порта в структуре NDIS_PORT_CHARACTERISTICS , прежде чем драйвер вызовет NdisMAllocatePort. Когда NdisMAllocatePort успешно возвращается, член PortNumber NDIS_PORT_CHARACTERISTICS, заданный параметром PortCharacteristics , имеет номер порта, назначенный порту NDIS.
Перед возвращением из MiniportHaltEx драйвер мини-порта должен вызвать функцию NdisMFreePort , чтобы освободить все порты, связанные с адаптером мини-порта. В случае сбоя инициализации адаптера мини-порта драйвер должен вызвать NdisMFreePort , чтобы освободить все порты, выделенные драйвером, прежде чем он возвращается из функции MiniportInitializeEx . Дополнительные сведения об освобождении портов NDIS см. в разделе Освобождение портов NDIS.
Максимальное количество портов, которое может выделить драйвер мини-порта, 0xffffff. Однако на практике драйверы задают максимальное число, основанное на типе порта и требованиях приложения драйвера. Например, для приложения моста число портов вряд ли превысит 16. Число портов будет выше для точек доступа, использующих запрашиваемые порты 802.1x, и значительно выше для драйверов глобальной сети, использующих порты виртуальной частной сети (VPN).
После того как драйвер мини-порта выделяет порт, порт находится в выделенном состоянии, а порт не активен. Порт нельзя использовать для отправки и получения данных, инициации указания состояния, выдачи запроса OID или запуска события Plug and Play (PnP), пока порт не будет активирован. NDIS активирует порт по умолчанию автоматически после того, как драйвер мини-порта задает атрибуты регистрации в NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES структуре. Чтобы запросить, чтобы NDIS не активировал порт по умолчанию, драйвер мини-порта может задать NDIS_MINIPORT_ATTRIBUTES_CONTROLS_DEFAULT_PORT в элементе AttributeFlags NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES.
NDIS передает состояние проверки подлинности порта по умолчанию функции MiniportInitializeEx в элементе DefaultPortAuthStates структуры NDIS_MINIPORT_INIT_PARAMETERS . Если драйвер мини-порта управляет портом по умолчанию, то, когда драйвер мини-порта активирует порт по умолчанию, он может активировать порт по умолчанию с помощью параметров проверки подлинности по умолчанию. Дополнительные сведения об активации порта по умолчанию см. в разделе Активация портов NDIS.
Драйверы мини-порта могут использовать флаг NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS в элементе Flags структуры NDIS_PORT_CHARACTERISTICS для портов, которые драйверы выделяют и активируют. В случае выделения NDIS назначает состояния проверки подлинности по умолчанию новым портам и игнорирует состояния проверки подлинности, передаваемые в функцию NdisMAllocatePort .
Дополнительные сведения о состояниях портов NDIS см. в разделе Состояния портов NDIS. Дополнительные сведения об активации портов см. в разделе Активация портов NDIS.