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構造体のバージョンを示すには、 Revision メンバーを次のいずれかの値に設定します。
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を返す場合、このメンバーの値は意味がありません。 クエリ要求で指定されたOID_ XXX に対して InformationBufferLength が小さすぎる場合、このメンバーは、要求を満たすために必要なバッファーの大きさを示します。
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
基になるドライバーが Set-information 要求の 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 で定義されている複数の操作をサポートできます。 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
基になるドライバーが Set-information 要求の InformationBuffer でバッファーから読み取ったバイト数。
メソッド OID の場合、 BytesRead は InputBufferLength メンバーの値以下にする必要があります。
DATA.METHOD_INFORMATION.BytesNeeded
指定された OID_ XXX コードによって要求された設定操作を実行するために、クエリ情報を返すために必要なバイト数。
NdisOidRequest がNDIS_STATUS_SUCCESSを返す場合、このメンバーの値は意味がありません。 クエリで指定されたOID_ XXX に対して InformationBufferLength が小さすぎる場合、このメンバーは要求を満たすために必要なバッファーの大きさを示します。 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 要求に状態表示が関連付けられている場合、状態を示すドライバーは、NDIS_STATUS_INDICATION構造体の DestinationHandle メンバーと RequestId メンバーを設定する必要があります。
この場合、ドライバーは DestinationHandle メンバーと RequestId メンバーをそれぞれ、NDIS_OID_REQUEST構造体の RequestHandle メンバーと RequestId メンバーの値に設定します。
たとえば、ワイヤレス ネットワークでは、OID 要求の処理が完了するまでに非常に長い時間がかかる場合があります。 この場合、ミニポート ドライバーは、OID 要求をすぐに完了し、後で OID 要求の最終的な結果を提供する状態を示します。
NdisRequestGenericn(1-4) 型は、独自の内部要求を作成するミニポート ドライバーで使用できます。 このような要求を実装するために、ミニポート ドライバーは、これらのジェネリック型のいずれかに内部変数を割り当てます。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | NDIS 6.0 以降でサポートされています。 |
Header | ndis/oidrequest.h (ndis.h を含む) |
こちらもご覧ください
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示