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_OID_REQUEST構造体の NDIS_OBJECT_HEADER 構造体。 Type メンバーを NDIS_OBJECT_TYPE_OID_REQUEST に設定します。 NDIS_OID_REQUEST構造体のバージョンを示すには、リビジョン メンバーを次のいずれかの値に設定します。
NDIS_OID_REQUEST_REVISION_2
NDIS 6.50 の SwitchId、VPortId、および Flags メンバーを追加しました。
ヘッダーサイズ メンバーを NDIS_SIZEOF_OID_REQUEST_REVISION_2 に設定します。
NDIS_OID_REQUEST_REVISION_1
NDIS 6.0 の元のバージョン。
ヘッダーサイズ メンバーを NDIS_SIZEOF_OID_REQUEST_REVISION_1 に設定します。
RequestType
NDIS_REQUEST_TYPE 列挙値の 1 つとして要求の種類。
PortNumber
要求が送信されるポート。 ポートが不明または既定の場合、このメンバーは 0 です。
Timeout
要求のタイムアウト (秒単位)。 NDIS は、ドライバーをリセットするか、ドライバーが要求を完了する前にタイムアウトが切れた場合、要求を取り消すことができます。
RequestId
要求の識別子。 ミニポート ドライバーは、すぐに要求を完了する必要があり、NDIS_STATUS_INDICATION_REQUIREDの状態で要求を完了する必要がある場合、ミニポート ドライバーは、関連付けられている NDIS_STATUS_INDICATION 構造体のメンバー RequestId を設定するには、この RequestId 値を使用します。
NDIS または上にあるドライバーは、RequestId を使用して要求を取り消すこともできます。 ミニポート ドライバーが取り消し要求を受信すると、ミニポート ドライバーは、一致する RequestIdを持つ保留中の要求を取り消します。 RequestId が 0 の場合、ミニポート ドライバーはこのメンバーを無視できます。 状態表示の詳細については、次の「解説」セクションを参照してください。
RequestHandle
OID 要求を発行したソースを識別するハンドル。 ミニポート ドライバーが要求をすぐに完了する必要があり、NDIS_STATUS_INDICATION_REQUIREDの状態で要求を完了する必要がある場合、ミニポート ドライバーは、この RequestHandle 値を使用して、関連付けられているNDIS_STATUS_INDICATION構造体の DestinationHandle メンバーを設定します。 この場合、NDIS は、OID 要求を発行したソースに後続の状態表示のみを送信します。
状態表示の詳細については、次の「解説」セクションを参照してください。
DATA
要求データを定義する共用体。 データ内の情報は、RequestType メンバーで指定された要求の種類によって異なります。 次のメンバー構造が指定されています。
DATA.Oid
DATA.QUERY_INFORMATION
この構造体には、NdisRequestQueryInformation または ndisRequestQueryStatistics 要求の種類 パラメーターが含まれています。 この構造体は次のように指定されます。
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 クエリ情報要求の します。 NdisOidRequest 関数がNDIS_STATUS_INVALID_LENGTHを返す場合、このメンバーの値は意味がありません。
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 が set-information 要求に。
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 で定義されている複数操作をサポートできます。 0 以上の任意の値を指定できます。 ゼロは、既定のメソッドを示します。 NDIS では、いくつかの定義済みのメソッドを使用してパブリック メソッド OID を定義できます。 ミニポート ドライバーは、カスタム メソッド OID を定義できます。 カスタム OID の詳細については、「OID_GEN_SUPPORTED_GUIDS」を参照してください。
DATA.METHOD_INFORMATION.BytesWritten
基になるドライバーまたは NDIS がバッファーに転送するバイト数 InformationBuffer クエリ情報要求の します。 NdisOidRequest 関数がNDIS_STATUS_INVALID_LENGTHを返す場合、このメンバーの値は意味がありません。
メソッド OID の場合、BytesWritten は、OutputBufferLength メンバーの値以下にする必要があります。
DATA.METHOD_INFORMATION.BytesRead
基になるドライバーがバッファーから読み取ったバイト数 (InformationBuffer が set-information 要求に。
メソッド OID の場合、BytesRead は、InputBufferLength メンバーの値以下にする必要があります。
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
OID 要求を処理したときに NDIS 6.0 以降のドライバーでサポートされていた NDIS 構造体のリビジョン。 改訂された構造体は、その内部に NDIS_OBJECT_HEADER 構造を持つ任意の NDIS 6.0 構造体です。 ドライバーが OID の設定に成功した場合は、サポートされている構造体のリビジョン番号 SupportedRevision を設定する必要があります。 NDIS のバージョン情報の詳細については、「NDIS バージョン情報の指定を参照してください。
Reserved1
将来の使用のために予約されています。
Reserved2
将来の使用のために予約されています。
SwitchId
VPortId で指定されたターゲット VPort が実行されているスイッチ識別するNDIS_NIC_SWITCH_ID値。
手記
このフィールドは、NDIS 6.50 以降でサポートされています。
VPortId
この OID 要求が対象とする VPort を識別するNDIS_NIC_SWITCH_VPORT_ID値。 このフィールドは、NDIS_OID_REQUEST_FLAGS_VPORT_ID_VALID フラグが設定されている場合にのみ有効と見なされます。
手記
このフィールドは、NDIS 6.50 以降でサポートされています。
Flags
この OID 要求のフラグのビットごとの OR を含む ULONG 値。 現時点では、次のフラグがサポートされています。
旗 | 価値 | 形容 |
---|---|---|
NDIS_OID_REQUEST_FLAGS_VPORT_ID_VALID | 0x0001 | このフラグを設定すると、VportId メンバーは有効と見なされ、OID の対象となる VPort を識別します。 このフラグが設定されていない場合、OID はミニポート アダプター自体用です。 |
手記
このフィールドは、NDIS 6.50 以降でサポートされています。
備考
プロトコル ドライバーまたはフィルター ドライバーは、InformationBuffer のバッファーとNDIS_OID_REQUEST構造体の非ページ メモリを割り当てる必要があります。 ページ メモリから割り当てられたデータを使用すると、基になるドライバーが IRQL = DISPATCH_LEVEL で実行され、要求された操作を実行するため、致命的なページ エラーが発生する可能性があります。
NDIS_OID_REQUESTには、プロトコル ドライバーが基になるドライバーを要求できる操作の種類ごとに DATA サブ構造が含まれています。 NdisOidRequest 呼び出す前に、プロトコル ドライバーは、Oid メンバーで指定されたクエリまたは設定操作を表すサブ構造体の関連するメンバーを入力します。 NDIS または基になるドライバーは、呼び出し元にコントロールを返す前に、残りのメンバーを入力します。
一部の OID 要求では、ミニポート ドライバーは、状態を示す OID 完了状態を提供できます。 この場合、ミニポート ドライバーは、OID 要求の完了状態のNDIS_STATUS_INDICATION_REQUIREDを返します。 ミニポート ドライバーは、特定の OID が許可しない限り、この状態を返すことはできません。 この状態が許可されているかどうかを確認するには、OID リファレンス ページを参照してください。
ミニポート ドライバーがNDIS_STATUS_INDICATION_REQUIRED返された OID 要求に状態表示が関連付けられている場合、状態を示すドライバーは、DestinationHandle を設定し、NDIS_STATUS_INDICATION 構造体のメンバー RequestId を する必要があります。
この場合、ドライバーは、DestinationHandle と RequestId メンバーをそれぞれ、NDIS_OID_REQUEST構造体の RequestHandle および RequestId メンバーの値に設定します。
たとえば、ワイヤレス ネットワークでは、OID 要求の処理が完了するまでに非常に長い時間がかかる場合があります。 この場合、ミニポート ドライバーは、OID 要求をすぐに完了し、後で OID 要求の最終的な結果を提供する状態を示します。
NdisRequestGenericn(1- 4) 型は、独自の内部要求を作成するミニポート ドライバーで使用できます。 このような要求を実装するために、ミニポート ドライバーは、これらのジェネリック型のいずれかに内部変数を割り当てます。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | NDIS 6.0 以降でサポートされています。 |
ヘッダー | ndis/oidrequest.h (ndis.h を含む) |
関連項目
NdisOidRequest の