Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
NDIS вызывает функцию ProtocolNetPnPEvent, чтобы указать сетевое событие Plug and Play, событие NDIS PnP или событие управления питанием для драйвера протокола.
Синтаксис
PROTOCOL_NET_PNP_EVENT ProtocolNetPnpEvent;
NDIS_STATUS ProtocolNetPnpEvent(
[in] NDIS_HANDLE ProtocolBindingContext,
[in] PNET_PNP_EVENT_NOTIFICATION NetPnPEventNotification
)
{...}
Параметры
[in] ProtocolBindingContext
Дескриптор области контекста, выделенной драйвером протокола, в которой этот драйвер хранит сведения о состоянии среды выполнения для каждой привязки. Драйвер протокола предоставил этот дескриптор при вызове функции NdisOpenAdapterEx . Событие NetEventXxx, обозначенное с помощью null ProtocolBindingContext, применяется ко всем привязкам. NetEventBindList и NetEventBindsComplete всегда указываются со значением NULLProtocolBindingContext. NetEventReconfigure можно указать с помощью указанного protocolBindingContext или nullProtocolBindingContext.
[in] NetPnPEventNotification
Указатель на NET_PNP_EVENT_NOTIFICATION структура, описывающая событие Plug and Play или событие управления питанием, которое NDIS указывает драйверу протокола.
Возвращаемое значение
ProtocolNetPnPEvent может возвращать любое из следующих элементов:
Код возврата | Описание |
---|---|
|
Драйвер протокола успешно обработал указанное событие сетевого Plug and Play, событие NDIS PnP или событие управления питанием. Значение этого кода состояния зависит от кода NetEvent в буферизованном
NET_PNP_EVENT_NOTIFICATION структура в NetPnPEvent:
|
|
Драйвер протокола возвращает свой ответ на указанное событие асинхронно с помощью вызоваФункция NdisCompleteNetPnPEvent. |
|
Драйверу протокола не удалось получить необходимые системные ресурсы для удовлетворения указанного Plug and Play или события управления питанием. |
|
Драйверы протокола NDIS 6.0 и более поздних версий не должны возвращать это состояние. NDIS 5. Драйвер протокола x, который не поддерживает Plug and Play, может вернуть это состояние в ответ на NetEventSetPower, чтобы указать, что NDIS должен отменить привязку к базовому адаптеру. |
|
Драйвер протокола не выполнил указанное событие по причинам, отличным от указанных в предыдущем списке. |
Драйвер протокола может завершиться сбоем событий NetEventQueryRemoveDevice и NetEventPortActivation .
Если драйвер протокола завершается сбоем события NetEventPortActivation , он не должен использовать связанные порты в последующих операциях.
Драйвер протокола всегда должен успешно выполнять события NetEventRestart, NetEventIMReEnableDevice, NetEventCancelRemoveDevice, NetEventReconfigure, NetEventBindList, NetEventBindsComplete, NetEventPause, NetEventPortDeactivation и NetEventPnPCapabilities , возвращая NDIS_STATUS_SUCCESS.
Комментарии
Функция ProtocolNetPnPEvent требуется в драйверах протоколов для поддержки Plug and Play и управления питанием. NDIS вызывает ProtocolNetPnPEvent, чтобы уведомить драйвер протокола о возникновении события сетевого Plug and Play, события NDIS PnP или события управления питанием.
The NET_PNP_EVENT_NOTIFICATION структура, передаваемая в ProtocolNetPnPEvent , описывает это событие. ПротоколNetPnPEvent интерпретирует два основных элемента информации в структуре NET_PNP_EVENT_NOTIFICATION:
- Код в элементе NetEvent, определяющий тип события Plug and Play или управления питанием.
- Сведения о событиях. Например, при использовании события NetEventSetPower член Buffer содержит состояние питания устройства, в которое переходит устройство.
Драйвер протокола всегда должен успешно выполнять событие NetEventQueryPower . После установки активного подключения драйвер протокола может вызвать функцию PoRegisterSystemState , чтобы зарегистрировать состояние непрерывной занятости. До тех пор, пока действует государственная регистрация, диспетчер питания не пытается переводить систему в спящий режим. Когда подключение становится неактивным, драйвер протокола отменяет регистрацию состояния, вызывая функцию PoUnregisterSystemState . Драйвер протокола никогда не должен пытаться предотвратить переход системы в спящее состояние путем сбоя события NetEventQueryPower . Обратите внимание, что за событием NetEventQueryPower всегда следует событие NetEventSetPower . Событие NetEventSetPower , указывающее текущее состояние питания базового устройства, фактически отменяет событие NetEventQueryPower .
Если драйвер протокола не может освободить устройство (например, из-за того, что устройство используется), событие NetEventQueryRemoveDevice должно завершиться ошибкой, возвращая NDIS_STATUS_FAILURE.
Драйвер протокола всегда должен выполнять успешное выполнение NetEventCancelRemoveDevice, NetEventReconfigure, NetEventBindList, NetEventBindsComplete, NetEventPnPCapabilities, NetEventPause или NetEventPortDeactivation , возвращая NDIS_STATUS_SUCCESS.
При обработке NetEventReconfigure или NetEventBindList драйвер протокола должен проверять данные, связанные с событием. Дополнительные сведения о таких данных см. в разделе NET_PNP_EVENT_NOTIFICATION.
NDIS вызывает ProtocolNetPnPEvent в IRQL = PASSIVE_LEVEL.
Примеры
Чтобы определить функцию ProtocolNetPnPEvent , необходимо сначала предоставить объявление функции, определяющее тип определяемой функции. Windows предоставляет набор типов функций для драйверов. Объявление функции с помощью типов функций помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.Например, чтобы определить функцию ProtocolNetPnPEvent с именем MyNetPnPEvent, используйте тип PROTOCOL_NET_PNP_EVENT , как показано в следующем примере кода:
PROTOCOL_NET_PNP_EVENT MyNetPnPEvent;
Затем реализуйте функцию следующим образом:
_Use_decl_annotations_
NDIS_STATUS
MyNetPnPEvent(
NDIS_HANDLE ProtocolBindingContext,
PNET_PNP_EVENT_NOTIFICATION NetPnPEvent
)
{...}
Тип функции PROTOCOL_NET_PNP_EVENT определен в файле заголовка Ndis.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует использование заметок, применяемых к типу функции PROTOCOL_NET_PNP_EVENT в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в разделе Объявление функций с помощью типов ролей функций для драйверов NDIS.
Сведения о Use_decl_annotations см. в статье О поведении функции.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается в NDIS 6.0 и более поздних версиях. |
Целевая платформа | Windows |
Header | ndis.h (включая Ndis.h) |
IRQL | PASSIVE_LEVEL |