Активация порта NDIS

После того как минипорт драйвер успешно распределит порт NDIS и перед использованием номера порта в функциях NDIS, драйвер должен активировать порт. Чтобы активировать порт, драйвер минипорта отправляет событие активации порта Plug and Play (PnP) в NDIS. Чтобы отправить событие активации порта PnP, драйверы минипорта используют код события NetEventPortActivation в вызове функции NdisMNetPnPEvent.

Чтобы активировать порты, драйвер минипорта должен задать элементы структуры NET_PNP_EVENT_NOTIFICATION, на которую указывает параметр NetPnPEventNdisMNetPnPEvent следующим образом:

номерПорта
Исходный порт уведомления о событии. Задайте для этого элемента нулевое значение, так как номера портов указаны в элементе буфера структуры, указанной элементом NetPnPEvent.

NetPnPEvent
Структура NET_PNP_EVENT, описывающая событие активации порта. Задайте элементы этой структуры следующим образом:

NetEvent
Код события, описывающий событие. Установите для этого элемента значение NetEventPortActivation.

буфер
Указатель на список связанных структур NDIS_PORT. Элемент Next структуры NDIS_PORT указывает на следующую структуру NDIS_PORT в списке.

ДлинаБуфера
Количество байтов, указанных в буфере . Установите BufferLength равным размеру структур NDIS_PORT.

Другие члены
Задайте для остальных членов NET_PNP_EVENT значение NULL.

Драйвер минипорта перечисляет порты, которые изменили состояние с неактивного на активное, в связанном списке структур NDIS_PORT. Однако, если порт по умолчанию минипорт-адаптера находится под воздействием события NetEventPortActivation PnP, порт по умолчанию должен быть единственным портом в списке.

Когда минипорт-драйвер уведомляет NDIS об активации порта (и, возможно, до возврата этого уведомления), минипорт-драйвер должен быть готов к обработке запросов на отправку и запросов OID, связанных с портом. Драйверы минипортов не должны использовать номер порта только что активированного порта в статусе или в получении индикаций до тех пор, пока вызов NdisMNetPnPEvent не вернется.

NDIS не уведомляет драйверы о активированных портах до тех пор, пока порт по умолчанию не активен. Когда NDIS вызывает функцию ProtocolBindAdapterEx драйвера протокола, NDIS предоставляет список всех активных портов в ActivePorts члене структуры NDIS_BIND_PARAMETERS, на которую указывает параметр BindParameters. Когда минипорт драйвер активирует новые порты, NDIS уведомляет все драйверы протоколов, привязанные к минипорт драйверу, с помощью события NetEventPortActivation PnP. Дополнительные сведения об обработке этих событий активации портов в драйвере протокола см. в обработке события активации порта PnP.

Перед тем как драйвер минипортов выделит порт NDIS, он должен вызвать функцию NdisMSetMiniportAttributes, чтобы установить атрибуты регистрации в структуре NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES. Драйверы минипорта могут управлять активацией порта по умолчанию, задав флаг атрибута NDIS_MINIPORT_CONTROLS_DEFAULT_PORT при вызове NdisMSetMiniportAttributes. Если драйвер минипорта несет ответственность за активацию порта по умолчанию, NDIS не инициирует привязку между минипорт-адаптером и вышестоящими драйверами, пока драйвер минипорта не активирует порт по умолчанию с событием активации порта PnP.

Все порты, указанные связанным списком структур NDIS_PORT, должны находиться в выделенном состоянии. Драйвер минипорта не должен пытаться активировать порт, который уже активен; если драйвер пытается активировать активный порт, NDIS рассматривает ситуацию как сбой активации порта.

Если NDIS не удается активировать какие-либо порты в списке, вызов NdisMNetPnPEventзавершается неудачей, и ни один из портов в списке не меняет состояние на активированное. Если NDIS не удалось активировать порты из-за отсутствия некоторых портов, NdisMNetPnPEvent возвращает возвращаемое значение NDIS_STATUS_INVALID_PORT. Если NDIS не удалось активировать порты, так как некоторые порты не находятся в выделенном состоянии, NdisMNetPnPEvent возвращает значение состояния NDIS_STATUS_INVALID_PORT_STATE.

После успешной активации порта порт находится в активированном состоянии. Драйверы минипорта могут указывать полученные данные и состояние порта в активированном состоянии.

NDIS передает состояние аутентификации порта по умолчанию функции MiniportInitializeEx в элементе DefaultPortAuthStates структуры NDIS_MINIPORT_INIT_PARAMETERS. Если драйвер минипорта управляет портом по умолчанию, когда драйвер минипорта активирует порт по умолчанию, он может активировать порт по умолчанию с помощью параметров проверки подлинности по умолчанию. Чтобы использовать параметры проверки подлинности по умолчанию, задайте флаг NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS в элементе Flags структуры NDIS_PORT_CHARACTERISTICS. Драйверы минипортов могут использовать флаг NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS для портов, которые они выделяют и активируют. В случае активации NDIS назначает состояния проверки подлинности по умолчанию только что активированному порту и игнорирует состояния проверки подлинности, передаваемые в NdisMNetPnPEvent для события NetEventPortActivation.

См. раздел Назначение портов NDISдля получения дополнительной информации об управлении портом, используемым по умолчанию, и выделении портов.