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


Функция 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_XXXNdisDirectOidReque st возвращается, но обычно это одно из следующих значений:

Возвращаемый код Описание
NDIS_STATUS_SUCCESS
Операция запроса успешно завершена.
NDIS_STATUS_PENDING
Запрос обрабатывается асинхронно, и NDIS вызовет вызывающий объект функция ProtocolDirectOidRequestComplete при завершении запроса.
NDIS_STATUS_INVALID_OID
Код OID_Xxx, указанный в элементе Oid элемента NDIS_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
Базовый драйвер не поддерживает запрошенную операцию. Для NdisDirectOidRequestNDIS также может вернуть это состояние, если вызывающий драйвер не зарегистрировал функция 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_ADD_SA OID_TCP_TASK_IPSEC_OFFLOAD_V2_DELETE_SA OID_TCP_TASK_IPSEC_OFFLOAD_V2_UPDATE_SA

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

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

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

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Поддерживается в NDIS 6.1 и более поздних версиях.
целевая платформа Настольный
заголовка ndis.h (include 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