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 の 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を返す場合、このメンバーの値は意味がありません。 クエリ要求で指定された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 要求の種類に固有です。

メモ このバッファーは、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 の 場合、BytesWrittenOutputBufferLength メンバーの値以下にする必要があります。

DATA.METHOD_INFORMATION.BytesRead

基になるドライバーが Set-information 要求の InformationBuffer でバッファーから読み取ったバイト数。

メソッド OID の場合、 BytesReadInputBufferLength メンバーの値以下にする必要があります。

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 を含む)

こちらもご覧ください

NDIS_OBJECT_HEADER

NDIS_REQUEST_TYPE

NDIS_STATUS_INDICATION

NdisOidRequest

OID_GEN_SUPPORTED_GUIDS