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


Функция NdisDirectOidRequest (ndis.h)

Функция NdisDirectOidRequest пересылает прямой запрос OID базовым драйверам, чтобы запросить возможности или состояние адаптера или задать состояние адаптера.

Синтаксис

NDIS_STATUS NdisDirectOidRequest(
  [in] NDIS_HANDLE       NdisBindingHandle,
  [in] PNDIS_OID_REQUEST OidRequest
);

Параметры

[in] NdisBindingHandle

Дескриптор, возвращаемый функцией NdisOpenAdapterEx , идентифицирующий целевой адаптер мини-порта для привязки.

[in] OidRequest

Указатель на структуру NDIS_OID_REQUEST , указывающую операцию, запрашиваемую с заданным кодом OID_Xxx для запроса состояния адаптера или задания состояния адаптера.

Возвращаемое значение

Базовый драйвер определяет, какой код NDIS_STATUS_XXXвозвращает NdisDirectOidRequest , но обычно это одно из следующих значений:

Код возврата Описание
NDIS_STATUS_SUCCESS
Операция запроса успешно завершена.
NDIS_STATUS_PENDING
Запрос обрабатывается асинхронно, и NDIS вызовет вызывающий объект Функция ProtocolDirectOidRequestComplete по завершении запроса.
NDIS_STATUS_INVALID_OID
Код OID_Xxx, указанный в элементе OidNDIS_OID_REQUEST структурированного буфера в OidRequest , был недопустим или не поддерживается базовым драйвером.
NDIS_STATUS_INVALID_LENGTH или NDIS_STATUS_BUFFER_TOO_SHORT
Значение, указанное в элементе InformationBufferLength NDIS_OID_REQUEST структурированного буфера в OidRequest , не соответствовало требованиям для заданного кода OID_Xxx . Если буфер информации был слишком мал, член BytesNeeded содержит правильное значение InformationBufferLength при возврате из NdisDirectOidRequest.
NDIS_STATUS_INVALID_DATA
Данные, предоставленные в InformationBuffer в заданной структуре NDIS_OID_REQUEST, были недопустимыми для заданного кода OID_Xxx .
NDIS_STATUS_NOT_SUPPORTED или NDIS_STATUS_NOT_RECOGNIZED
Базовый драйвер не поддерживает запрошенную операцию. Для NdisDirectOidRequest NDIS также может возвращать это состояние, если вызывающий драйвер не зарегистрировалФункция ProtocolDirectOidRequestComplete.
NDIS_STATUS_RESOURCES
Запрос не может быть удовлетворен из-за нехватки ресурсов. Как правило, это возвращаемое значение указывает, что попытка выделить память была неудачной, но это не обязательно означает, что тот же запрос, отправленный позже, будет неудачен по той же причине.
NDIS_STATUS_NOT_ACCEPTED
Базовый драйвер попытался выполнить запрошенную операцию, обычно заданную на сетевом адаптере, но она завершилась сбоем. Например, попытка задать слишком много адресов многоадресной рассылки может привести к возврату этого значения.
NDIS_STATUS_CLOSING или NDIS_STATUS_CLOSING_INDICATING
Базовый драйвер не выполнил запрошенную операцию, так как выполняется операция закрытия.
NDIS_STATUS_RESET_IN_PROGRESS
Базовый драйвер мини-порта в настоящее время не может удовлетворить запрос, так как он в настоящее время сбрасывает затронутый сетевой адаптер. Функция ProtocolStatusEx вызываемого абонента была или будет вызвана с NDIS_STATUS_RESET_START, чтобы указать, что выполняется сброс. Это возвращаемое значение не обязательно указывает на то, что тот же запрос, отправленный позже, не будет выполнен по той же причине.
NDIS_STATUS_FAILURE
Это значение обычно является неспецифичным значением по умолчанию, которое возвращается, если ни одно из более конкретных значений NDIS_STATUS_Xxx не привело к сбою запроса базового драйвера.

Комментарии

Функцию NdisDirectOidRequest нельзя использовать для общих запросов OID. Для общих запросов OID используйте вместо него функцию NdisOidRequest . NdisDirectOidRequest можно использовать только для OID, которые NDIS поддерживает для использования с прямым интерфейсом OID. Например, можно использовать следующие идентификаторы OID:

OID_TCP_TASK_IPSEC_OFFLOAD_V2_UPDATE_SA OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA OID_TCP_TASK_IPSEC_OFFLOAD_V2_DELETE_SA

Драйвер протокола должен выделить достаточно памяти для хранения буфера информации, связанного с указанным OID. Драйвер также должен выделить и настроить буфер в параметре OidRequest перед вызовом NdisDirectOidRequest. Оба буфера должны быть выделены из непагрегированного пула, так как базовый драйвер выполняется в среде IRQL при обработке запроса.

NdisDirectOidRequest пересылает запрос базовым драйверам или обрабатывает сам запрос. Если драйвером следующего уровня является промежуточный драйвер NDIS, он может вызвать NdisDirectOidRequest с собственным запросом OID, прежде чем выполнять запрос, который изначально отправлен драйвером более высокого уровня.

Драйвер, вызывающий NdisDirectOidRequest , должен зарегистрироватьФункция ProtocolDirectOidRequestComplete.

Интерфейс прямого запроса OID аналогичен общему интерфейсу запроса OID. Дополнительные сведения об отправке общих запросов см. в разделе NdisOidRequest.

Примечание Хотя прямые запросы OID обычно не сериализуются, сама NDIS может по-прежнему отправлять запрос с NDIS_STATUS_PENDING и помещает запрос в очередь для последующего завершения. Например, NDIS может выполнять и помещать в очередь прямой запрос OID, отправленный в выборочный минипорт приостановки, который в настоящее время находится в состоянии низкого энергопотребления. Протоколы и фильтры должны быть подготовлены для обработки кода NDIS_STATUS_PENDING, даже если базовый мини-порт будет выполнять запрос синхронно.
 

Требования

Требование Значение
Минимальная версия клиента Поддерживается в NDIS 6.1 и более поздних версиях.
Целевая платформа Персональный компьютер
Верхняя часть ndis.h (включая Ndis.h)
Библиотека Ndis.lib
IRQL <= DISPATCH_LEVEL

См. также раздел

NDIS_OID_REQUEST

NdisOidRequest

NdisOpenAdapterEx

OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA OID_TCP_TASK_IPSEC_OFFLOAD_V2_DELETE_SA OID_TCP_TASK_IPSEC_OFFLOAD_V2_UPDATE_SA ProtocolDirectOidRequestComplete

ProtocolStatusEx