Поделиться через


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

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

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

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

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

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

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

BufferLength
Число байтов, указанных в буфере . Задайте для BufferLength размер структур NDIS_PORT.

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

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

Когда драйвер минипорта уведомляет 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 в элементе Флагиструктуры NDIS_PORT_CHARACTERISTICS . Драйверы мини-порта могут использовать флаг NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS для портов, которые они выделяют и активируют. В случае активации NDIS назначает состояния проверки подлинности по умолчанию только что активированному порту и игнорирует состояния проверки подлинности, передаваемые в NdisMNetPnPEvent для события NetEventPortActivation .

Дополнительные сведения об управлении портом по умолчанию и выделении портов см. в разделе Выделение портов NDIS.