структура NDIS_OID_REQUEST (ndis/oidrequest.h)
Чтобы запросить или задать сведения об OID, NDIS отправляет NDIS_OID_REQUEST структуры для фильтрации драйверов и минипортов.
Синтаксис
typedef struct _NDIS_OID_REQUEST {
NDIS_OBJECT_HEADER Header;
NDIS_REQUEST_TYPE RequestType;
NDIS_PORT_NUMBER PortNumber;
UINT Timeout;
PVOID RequestId;
NDIS_HANDLE RequestHandle;
union {
NDIS_OID Oid;
struct {
NDIS_OID Oid;
PVOID InformationBuffer;
UINT InformationBufferLength;
UINT BytesWritten;
UINT BytesNeeded;
} QUERY_INFORMATION;
struct {
NDIS_OID Oid;
PVOID InformationBuffer;
UINT InformationBufferLength;
UINT BytesRead;
UINT BytesNeeded;
} SET_INFORMATION;
struct {
NDIS_OID Oid;
PVOID InformationBuffer;
ULONG InputBufferLength;
ULONG OutputBufferLength;
ULONG MethodId;
UINT BytesWritten;
UINT BytesRead;
UINT BytesNeeded;
} METHOD_INFORMATION;
} DATA;
_REQUEST_DATA _REQUEST_DATA;
UCHAR *NdisReserved[NDIS_OID_REQUEST_NDIS_RESERVED_SIZE sizeof(PVOID)];
UCHAR *MiniportReserved[2 sizeof(PVOID)];
UCHAR *SourceReserved[2 sizeof(PVOID)];
UCHAR SupportedRevision;
UCHAR Reserved1;
USHORT Reserved2;
NDIS_NIC_SWITCH_ID SwitchId;
NDIS_NIC_SWITCH_VPORT_ID VPortId;
ULONG Flags;
} NDIS_OID_REQUEST, *PNDIS_OID_REQUEST;
Члены
Header
Структура NDIS_OBJECT_HEADER для структуры NDIS_OID_REQUEST. Задайте для элемента типа
NDIS_OID_REQUEST_REVISION_2
Добавлены SwitchId, VPortIdи флаги для NDIS 6.50.
Задайте для элемента NDIS_SIZEOF_OID_REQUEST_REVISION_2 NDIS_SIZEOF_OID_REQUEST_REVISION_2 заголовокразмер.
NDIS_OID_REQUEST_REVISION_1
Исходная версия для NDIS 6.0.
Задайте для NDIS_SIZEOF_OID_REQUEST_REVISION_1 элемента
RequestType
Тип запроса в качестве одного из значений перечисления NDIS_REQUEST_TYPE.
PortNumber
Порт, на который отправляется запрос. Если порт неизвестен или по умолчанию, этот элемент равен нулю.
Timeout
Время ожидания в секундах для запроса. NDIS может сбросить драйвер или отменить запрос, если истекает время ожидания, прежде чем драйвер завершит запрос.
RequestId
Идентификатор запроса. Если мини-драйвер должен немедленно завершить запрос и завершить запрос с состоянием NDIS_STATUS_INDICATION_REQUIRED, драйвер минипорта использует это значение RequestId, чтобы задать requestId член связанной структуры NDIS_STATUS_INDICATION.
Драйверы NDIS или более поздней версии также могут использовать RequestId для отмены запроса. Когда драйвер минипорта получает запрос на отмену, драйвер минипорта отменяет все ожидающие запросы с соответствующим RequestId. Если RequestId равно нулю, драйвер минипорта может игнорировать этот элемент. Дополнительные сведения о признаках состояния см. в следующем разделе "Примечания".
RequestHandle
Дескриптор, определяющий источник, выдаваемый запросом OID. Если мини-драйвер должен немедленно завершить запрос и завершить запрос с состоянием NDIS_STATUS_INDICATION_REQUIRED, драйвер минипорта использует это значение RequestHandle, чтобы задать DestinationHandle член связанной структуры NDIS_STATUS_INDICATION. В этом случае NDIS отправляет только последующее указание состояния источнику, который выдал запрос OID.
Дополнительные сведения о признаках состояния см. в следующем разделе "Примечания".
DATA
Объединение, определяющее данные запроса. Сведения в данных зависят от типа запроса, указанного членом RequestType. Указаны следующие структуры-члены:
DATA.Oid
DATA.QUERY_INFORMATION
Эта структура содержит параметры для NdisRequestQueryInformation или типа запроса NdisRequestQueryStatistic s. Эта структура указана следующим образом:
struct _QUERY
{
NDIS_OID Oid;
PVOID InformationBuffer;
UINT InformationBufferLength;
UINT BytesWritten;
UINT BytesNeeded;
} QUERY_INFORMATION;
DATA.QUERY_INFORMATION.Oid
Идентификатор объекта запрошенной операции. Значением является код OID_ XXX.
DATA.QUERY_INFORMATION.InformationBuffer
Указатель на буфер, в который базовый драйвер или NDIS возвращают запрошенные сведения для запросов на запросы.
DATA.QUERY_INFORMATION.InformationBufferLength
Размер буфера в InformationBufferв байтах. Значение по Oid определяет значение, соответствующее этому элементу.
DATA.QUERY_INFORMATION.BytesWritten
Количество байтов, которые базовый драйвер или NDIS передают в буфер в InformationBuffer для запросов информации. Если функция
DATA.QUERY_INFORMATION.BytesNeeded
Количество байтов, необходимых для возврата сведений о запросах, запрошенных указанным OID_ кодом XXX.
Если NdisOidRequest возвращает NDIS_STATUS_SUCCESS, значение этого элемента является бессмысленным. Если InformationBufferLength слишком мал для заданного OID_ XXX в запросе, этот элемент указывает, насколько большой буфер необходим для удовлетворения запроса.
DATA.SET_INFORMATION
Эта структура содержит параметры для типа запроса NdisRequestSetInformation. Эта структура указана следующим образом:
struct _SET
{
NDIS_OID Oid;
PVOID InformationBuffer;
UINT InformationBufferLength;
UINT BytesRead;
UINT BytesNeeded;
} SET_INFORMATION;
DATA.SET_INFORMATION.Oid
Идентификатор объекта запрошенной операции. Значением является код OID_ XXX.
DATA.SET_INFORMATION.InformationBuffer
Указатель на буфер, из которого базовый драйвер считывает сведения, предоставленные вызывающим для запросов на набор данных.
DATA.SET_INFORMATION.InformationBufferLength
Размер буфера в InformationBufferв байтах. Значение по Oid определяет значение, соответствующее этому элементу.
DATA.SET_INFORMATION.BytesRead
Количество байтов, считываемых базовым драйвером из буфера в InformationBuffer для запросов набора сведений.
DATA.SET_INFORMATION.BytesNeeded
Количество байтов, необходимых для выполнения операции набора, запрошенной указанным OID_ xxx кодом.
Если NdisOidRequest возвращает NDIS_STATUS_SUCCESS, значение этого элемента является бессмысленным. Если буфер на InformationBuffer не содержит достаточных данных для заданного OID_ XXX в запросе на набор, этот элемент указывает, сколько данных требуется.
DATA.METHOD_INFORMATION
Эта структура содержит параметры для типа запроса NdisRequestMethod. Эта структура указана следующим образом:
struct _METHOD
{
NDIS_OID Oid;
PVOID InformationBuffer;
ULONG InputBufferLength;
ULONG OutputBufferLength;
ULONG MethodId;
UINT BytesWritten;
UINT BytesRead;
UINT BytesNeeded;
} METHOD_INFORMATION;
DATA.METHOD_INFORMATION.Oid
Идентификатор объекта запрошенной операции. Значением является код OID_ XXX.
DATA.METHOD_INFORMATION.InformationBuffer
Указатель на буфер, в который базовый драйвер или NDIS возвращает запрошенные сведения для операций запроса или из которого базовый драйвер считывает сведения, предоставленные вызывающим объектом для операций набора. Эти операции зависят от типа выполненных запросов NdisRequestMethod.
DATA.METHOD_INFORMATION.InputBufferLength
Размер в байтах доступных для чтения данных в буфере в InformationBuffer. Значение по Oid определяет значение, соответствующее этому элементу.
DATA.METHOD_INFORMATION.OutputBufferLength
Количество байтов в буфере в InformationBuffer, которые драйвер может записать.
DATA.METHOD_INFORMATION.MethodId
Метод, выполняемый для метода OID. Запрос метода OID может поддерживать несколько операций, определенных MethodId. Это может быть любое значение, которое больше или равно нулю. Ноль указывает метод по умолчанию. NDIS может определять общедоступные методы OID с некоторыми предопределенными методами. Минипорт-драйверы могут определять пользовательские методы OID. Дополнительные сведения о пользовательских OID см. в OID_GEN_SUPPORTED_GUIDS.
DATA.METHOD_INFORMATION.BytesWritten
Количество байтов, которые базовый драйвер или NDIS передают в буфер в InformationBuffer для запросов информации. Если функция
Для OID методов
DATA.METHOD_INFORMATION.BytesRead
Количество байтов, считываемых базовым драйвером из буфера в InformationBuffer для запросов набора сведений.
Для OID методов
DATA.METHOD_INFORMATION.BytesNeeded
Количество байтов, необходимых для возврата сведений запроса или выполнения операции набора, запрошенной указанным OID_ XXX кодом.
Если NdisOidRequest возвращает NDIS_STATUS_SUCCESS, значение этого элемента является бессмысленным. Если InformationBufferLength слишком мал для заданного OID_ XXX в запросе, этот элемент указывает, насколько большой буфер необходим для удовлетворения запроса. Если буфер в InformationBuffer не содержит достаточных данных для заданного OID_ XXX в наборе, этот элемент указывает, сколько данных требуется.
_REQUEST_DATA
NdisReserved[NDIS_OID_REQUEST_NDIS_RESERVED_SIZE * sizeof(PVOID)]
Область, зарезервированная для NDIS.
MiniportReserved[2 * sizeof(PVOID)]
Область, зарезервированная для мини-драйвера.
SourceReserved[2 * sizeof(PVOID)]
Область, зарезервированная для исходного драйвера. Зарезервировано для распределителя структуры NDIS_OID_REQUEST. Обычно это драйвер протокола NDIS или драйвер фильтра NDIS.
SupportedRevision
Редакция структуры NDIS, поддерживаемой драйвером NDIS 6.0 или более поздней версии при обработке запроса OID. Измененная структура — это любая структура NDIS 6.0, которая имеет NDIS_OBJECT_HEADER структуру внутри нее. После успешного задания OID драйвер должен задать SupportedRevision номер редакции поддерживаемой структуры. Дополнительные сведения о версии NDIS см. в разделе Указание сведений о версии NDIS.
Reserved1
Зарезервировано для дальнейшего использования.
Reserved2
Зарезервировано для дальнейшего использования.
SwitchId
Значение NDIS_NIC_SWITCH_ID, определяющее переключатель, на котором выполняется целевой VPort, указанный VPortId.
Заметка
Это поле поддерживается в NDIS 6.50 и более поздних версиях.
VPortId
Значение NDIS_NIC_SWITCH_VPORT_ID, определяющее VPort, на который предназначен этот запрос OID. Это поле считается допустимым, только если установлен флаг NDIS_OID_REQUEST_FLAGS_VPORT_ID_VALID.
Заметка
Это поле поддерживается в NDIS 6.50 и более поздних версиях.
Flags
Значение ULONG, содержащее побитовое ЗНАЧЕНИЕ ИЛИ флагов для этого запроса OID. В настоящее время поддерживаются следующие флаги:
Флаг | Ценность | Описание |
---|---|---|
NDIS_OID_REQUEST_FLAGS_VPORT_ID_VALID | 0x0001 | Если этот флаг задан, элемент VportId считается допустимым и определяет VPort, к которому предназначен OID. Если этот флаг не задан, OID предназначен для самого мини-адаптера. |
Заметка
Это поле поддерживается в NDIS 6.50 и более поздних версиях.
Замечания
Драйвер протокола или драйвер фильтра должен выделить неупакованную память для буфера в InformationBuffer и для структуры NDIS_OID_REQUEST. Использование данных, выделенных из страницной памяти, может привести к сбою страниц, так как базовые драйверы выполняются в IRQL = DISPATCH_LEVEL для выполнения запрошенной операции.
NDIS_OID_REQUEST содержит подструктуру DATA для каждого типа операции, которую драйвер протокола может запрашивать базовый драйвер. Перед вызовом NdisOidRequestдрайвер протокола заполняет соответствующие члены подструктуры, представляющей запрос или операцию задания, указанную в элементе Oid. NDIS или базовый драйвер заполняет остальные элементы перед возвратом элемента управления вызывающему объекту.
Некоторые запросы OID позволяют мини-драйверу предоставить состояние завершения OID с указанием состояния. В этом случае драйвер минипорта возвращает NDIS_STATUS_INDICATION_REQUIRED для состояния завершения запроса OID. Минипорт-драйвер не может вернуть это состояние, если он не разрешает определенный OID. Чтобы определить, разрешено ли это состояние, см. страницу справочника по OID.
Если указание состояния связано с запросом OID, в котором драйвер минипорта вернулся NDIS_STATUS_INDICATION_REQUIRED, драйвер, указывающий состояние, должен задать DestinationHandle и RequestId членов в структуре NDIS_STATUS_INDICATION.
В этом случае драйвер задает
Например, в беспроводной сети обработка запроса OID может занять очень много времени. В этом случае минипорт-драйвер может немедленно завершить запрос OID и указать состояние позже, чтобы предоставить окончательный результат для запроса OID.
Типы NdisRequestGenericn(1-4) доступны для драйверов мини-порта, создающих собственные внутренние запросы. Для реализации такого запроса драйвер минипорта назначает внутреннюю переменную одному из этих универсальных типов.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Поддерживается в NDIS 6.0 и более поздних версиях. |
заголовка | ndis/oidrequest.h (include ndis.h) |