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


функция обратного вызова MINIPORT_DIRECT_OID_REQUEST (ndis.h)

NDIS вызывает функцию MiniportDirectOidRequest драйвера miniport Для обработки прямого запроса OID для запроса или задания сведений в драйвере.

Примечание Функцию необходимо объявить с помощью типа MINIPORT_DIRECT_OID_REQUEST . Дополнительные сведения см. в следующем разделе Примеры.
 

Синтаксис

MINIPORT_DIRECT_OID_REQUEST MiniportDirectOidRequest;

NDIS_STATUS MiniportDirectOidRequest(
  [in] NDIS_HANDLE MiniportAdapterContext,
  [in] PNDIS_OID_REQUEST OidRequest
)
{...}

Параметры

[in] MiniportAdapterContext

Дескриптор контекстной области, выделенной драйвером мини-порта в функции MiniportInitializeEx . Драйвер мини-порта использует эту контекстную область для хранения сведений о состоянии адаптера мини-порта.

[in] OidRequest

Указатель на структуру NDIS_OID_REQUEST , которая содержит буфер и пакет запроса для обработки драйвера мини-порта. В зависимости от запроса драйвер возвращает запрошенные сведения в предоставленной структуре.

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

MiniportDirectOidRequest может возвращать одно из следующих значений состояния:

Код возврата Описание
NDIS_STATUS_SUCCESS
Драйвер мини-порта установил или получил данные в соответствии с запросом.
NDIS_STATUS_PENDING
Драйвер мини-порта выполнит запрос асинхронно. После того как драйвер мини-порта завершит всю обработку, он должен вызвать Функция NdisMDirectOidRequestComplete, информирующая NDIS о том, что запрос завершен.
NDIS_STATUS_INVALID_OID
Запрос, указанный OidRequest , является недопустимым или не распознанный.
NDIS_STATUS_NOT_SUPPORTED
Запрос, указанный в OidRequest , распознается, но драйвер мини-порта не поддерживает его.
NDIS_STATUS_BUFFER_TOO_SHORT
Буфер, который предоставляет OidRequest , был слишком мал для хранения запрошенных данных.
NDIS_STATUS_INVALID_LENGTH
Значение, указанное в элементе InformationBufferLength структуры NDIS_OID_REQUEST в OidRequest , неверно для указанного кода OID_Xxx .
NDIS_STATUS_INVALID_DATA
Один или несколько параметров, указанных для запроса в OidRequest , были недопустимыми.
NDIS_STATUS_NOT_ACCEPTED
После вызова Функция MiniportDevicePnPEventNotify, указывая на неожиданное удаление, NDIS называется функцией MiniportHaltEx драйвера. Если драйвер получил какие-либо запросы OID до вызова NDIS MiniportHaltEx, он должен немедленно завершить такие запросы со значением состояния NDIS_STATUS_NOT_ACCEPTED.
NDIS_STATUS_REQUEST_ABORTED
Драйвер мини-порта остановил обработку запроса. Например, NDIS вызывает функцию MiniportResetEx .
NDIS_STATUS_INDICATION_REQUIRED
Драйвер мини-порта предоставит состояние завершения OID с последующим указанием состояния. Драйвер мини-порта не может вернуть NDIS_STATUS_INDICATION_REQUIRED, если это не разрешено определенным идентификатором OID. Чтобы определить, разрешено ли это состояние, см. страницу справочника по OID.. Дополнительные сведения о NDIS_STATUS_INDICATION_REQUIRED см. в разделе NDIS_OID_REQUEST и NDIS_STATUS_INDICATION.

Комментарии

MiniportDirectOidRequest — это необязательная функция. Драйвер мини-порта регистрирует эту функцию, если обрабатывает прямые запросы OID. Драйвер указывает точку входа MiniportDirectOidRequest при вызовеФункция NdisMRegisterMiniportDriver. Драйвер мини-порта, который регистрируетФункция MiniportCancelDirectOidRequest также должна зарегистрировать MiniportDirectOidRequest.

NDIS вызывает функцию MiniportDirectOidRequest либо от своего имени, либо от имени драйвера связанного протокола, который вызвал функцию NdisDirectOidRequest . Драйверы минипорта должны изучить запрос, предоставленный в параметре OidRequest , и выполнить запрошенное действие.

Обратите внимание, что NDIS не проверяет содержимое OID в OidRequest. Поэтому сам драйвер должен проверить это содержимое. Если драйвер определяет, что заданное значение выходит за пределы границ, он должен завершить запрос и вернуть NDIS_STATUS_INVALID_DATA.

NDIS не сериализует запросы, отправляемые в MiniportDirectOidRequest , с другими запросами OID. Драйвер мини-порта должен иметь возможность обрабатывать несколько вызовов MiniportDirectOidRequest , если другие запросы, отправленные в MiniportOidRequest или MiniportDirectOidRequest , не выполняются.

Примечание Логика NDIS проверка для зависания не сбрасывает драйвер мини-порта, который не отвечает, если драйвер минипорта ожидает в контексте вызова MiniportOidRequest. Поэтому драйверы мини-портов не должны ждать завершения аппаратных операций из контекста вызова MiniportOidRequest . Вместо этого драйвер может вернуть NDIS_STATUS_PENDING и поместить рабочий элемент в очередь.
 
NDIS вызывает MiniportDirectOidRequest в IRQL <= DISPATCH_LEVEL.

Примеры

Чтобы определить функцию MiniportDirectOidRequest , необходимо сначала предоставить объявление функции, определяющее тип определяемой функции. Windows предоставляет набор типов функций для драйверов. Объявление функции с помощью типов функций помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.

Например, чтобы определить функцию MiniportDirectOidRequest с именем MyDirectOidRequest, используйте тип MINIPORT_DIRECT_OID_REQUEST , как показано в этом примере кода:

MINIPORT_DIRECT_OID_REQUEST MyDirectOidRequest;

Затем реализуйте функцию следующим образом:

_Use_decl_annotations_
NDIS_STATUS
 MyDirectOidRequest(
    NDIS_HANDLE  MiniportAdapterContext,
    PNDIS_OID_REQUEST  OidRequest
    )
  {...}

Тип функции MINIPORT_DIRECT_OID_REQUEST определен в файле заголовка Ndis.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует, что будут использоваться заметки, применяемые к типу функции MINIPORT_DIRECT_OID_REQUEST в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в разделе Объявление функций с помощью типов ролей функций для драйверов NDIS.

Сведения о Use_decl_annotations см. в статье О поведении функции.

Требования

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

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

MiniportCancelDirectOidRequest MiniportDevicePnPEventNotify

MiniportDirectOidRequest

MiniportHaltEx

MiniportInitializeEx

MiniportOidRequest

MiniportResetEx

NDIS_OID_REQUEST

NDIS_STATUS_INDICATION

NdisDirectOidRequest

NdisMDirectOidRequestComplete

NdisMRegisterMiniportDriver