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 の SwitchIdVPortId、および 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 の種類に固有です。

メモ このバッファーは、set-information 要求と query-information 要求の両方に使用されます。 その結果、set-information 要求のバッファー内のデータは、クエリ情報要求に対して返されるデータによって上書きされます。 正確な使用方法は、Oid メンバーによって指定された要求された操作によって異なります。
 

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 を する必要があります。

この場合、ドライバーは、DestinationHandleRequestId メンバーをそれぞれ、NDIS_OID_REQUEST構造体の RequestHandle および RequestId メンバーの値に設定します。

たとえば、ワイヤレス ネットワークでは、OID 要求の処理が完了するまでに非常に長い時間がかかる場合があります。 この場合、ミニポート ドライバーは、OID 要求をすぐに完了し、後で OID 要求の最終的な結果を提供する状態を示します。

NdisRequestGenericn(1- 4) 型は、独自の内部要求を作成するミニポート ドライバーで使用できます。 このような要求を実装するために、ミニポート ドライバーは、これらのジェネリック型のいずれかに内部変数を割り当てます。

必要条件

要件 価値
サポートされる最小クライアント NDIS 6.0 以降でサポートされています。
ヘッダー ndis/oidrequest.h (ndis.h を含む)

関連項目

NDIS_OBJECT_HEADER

NDIS_REQUEST_TYPE

NDIS_STATUS_INDICATION

NdisOidRequest の

OID_GEN_SUPPORTED_GUIDS