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


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

Примечание NDIS 5. x устарел и заменен NDIS 6. x. Сведения о разработке новых драйверов NDIS см. в статье Сетевые драйверы, начиная с Windows Vista. Сведения о переносе NDIS 5. драйверов x в NDIS 6. xсм. перенос драйверов NDIS 5.x в NDIS 6.0.

NdisRequest перенаправит запрос базовому драйверу, который запрашивает возможности или состояние сетевой карты или задает состояние его сетевой карты.

Синтаксис

void NdisRequest(
  [out] PNDIS_STATUS  Status,
  [in]  NDIS_HANDLE   NdisBindingHandle,
  [in]  PNDIS_REQUEST NdisRequest
);

Параметры

[out] Status

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

  • NDIS_STATUS_SUCCESS
    Запрошенная операция успешно завершена.

  • NDIS_STATUS_PENDING
    Запрос обрабатывается асинхронно, и функция протоколаRequestComplete вызываемого абонента будет вызываться при завершении.

  • NDIS_STATUS_INVALID_OID
    Код OID_XXX, указанный в элементе Oid буфера, структурированного NDIS_REQUEST в NdisRequest, является недопустимым или неподдерживаемым базовым драйвером.

  • NDIS_STATUS_INVALID_LENGTH или NDIS_STATUS_BUFFER_TOO_SHORT
    Значение, указанное в InformationBufferLength элемента буфера NDIS_REQUEST структурированного в NdisRequest, не соответствует требованиям для заданного кода OID_XXX. Если буфер информации слишком мал, элемент BytesNeeded содержит правильное значение для InformationBufferLength при возврате из NdisRequest.

  • NDIS_STATUS_INVALID_DATA
    Данные, предоставленные в InformationBuffer в данной структуре NDIS_REQUEST, недопустимы для заданного кода OID_XXX.

  • NDIS_STATUS_NOT_SUPPORTED или NDIS_STATUS_NOT_RECOGNIZED
    Базовый драйвер не поддерживает запрошенную операцию.

  • NDIS_STATUS_RESOURCES
    Запрос не может быть удовлетворен из-за нехватки ресурсов. Как правило, этот возврат указывает, что попытка выделения памяти была неудачной, но не обязательно указывает, что тот же запрос, отправленный позже, завершится ошибкой по той же причине.

  • NDIS_STATUS_NOT_ACCEPTED
    Базовый драйвер попытался выполнить запрошенную операцию, как правило, набор на сетевом адаптере, но не удалось выполнить netcard. Например, попытка задать слишком много адресов многоадресной рассылки может привести к возврату этого значения.

  • NDIS_STATUS_CLOSING или NDIS_STATUS_CLOSING_INDICATING
    Базовый драйвер завершился ошибкой запрошенной операции, так как выполняется закрытие.

  • NDIS_STATUS_RESET_IN_PROGRESS
    Базовый драйвер сетевого адаптера не может удовлетворить запрос в настоящее время, так как он в настоящее время сбрасывает netcard. Функция ProtocolStatus вызываемой вызывающей стороны или вызовется с NDIS_STATUS_RESET_START, чтобы указать, что сброс выполняется. Это возвращаемое значение не обязательно указывает, что тот же запрос, отправленный позже, завершится ошибкой по той же причине.

  • NDIS_STATUS_FAILURE
    Обычно это значение является неспецифиченым значением по умолчанию, возвращаемым, если ни один из более конкретных NDIS_STATUS_XXX привел к сбою запроса базовым драйвером.

[in] NdisBindingHandle

Задает дескриптор, возвращаемый NdisOpenAdapter, определяющий целевой сетевой адаптер или виртуальный адаптер следующего драйвера, к которому привязан вызывающий объект.

[in] NdisRequest

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

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

Никакой

Замечания

Драйвер протокола должен выделить достаточно памяти для буфера информации, связанного с OID_XXX операции, которую он запрашивает. Драйвер также должен выделить и настроить буфер на NdisRequest перед вызовом NdisRequest. Оба буфера должны быть выделены из непагрегированного пула, так как базовый драйвер выполняется при вызове IRQL во время обработки запроса.

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

Некоторые ошибки, возвращенные состояния, можно восстановить, включая следующие:

NDIS_STATUS_INVALID_OID

NDIS_STATUS_INVALID_LENGTH

NDIS_STATUS_BUFFER_TOO_SHORT

NDIS_STATUS_INVALID_DATA

NDIS_STATUS_RESOURCES

NDIS_STATUS_RESET_IN_PROGRESS

То есть драйвер может изменить пакет по NdisRequest соответствующим образом, чтобы исправить код OID_XXX и(или) размер или содержимое буфера в InformationBuffer и повторно отправить пакет запроса NdisRequest. Тот же пакет может быть удовлетворен при повторной отправке NdisRequest, если исходный вызов указал на сброс во время выполнения или что нехватка ресурсов, которая может быть временной, предотвратила выполнение этого запроса.

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

Дополнительные сведения об общих и связанных с ним буферах информации см. в идентификаторах объектов NDIS.

  • Целевая платформа: универсальная
  • Версия: не поддерживается для драйверов NDIS 6.0 в Windows Vista. Вместо этого используйте NdisOidRequest. Поддерживается для драйверов NDIS 5.1 в Windows Vista и Windows XP.

Требования

Требование Ценность
заголовка ndis.h (include Ndis.h)
библиотеки Ndis.lib
IRQL IRQL <= DISPATCH_LEVEL

См. также