MINIPORT_DIRECT_OID_REQUESTコールバック関数 (ndis.h)

NDIS は、ミニポート ドライバーの ミニポートDirectOidRequest 関数を呼び出して、ドライバーの情報を照会または設定するための直接 OID 要求を処理します。

メモMINIPORT_DIRECT_OID_REQUEST型を使用して関数を宣言する必要があります。 詳細については、次の例に関するセクションを参照してください。
 

構文

MINIPORT_DIRECT_OID_REQUEST MiniportDirectOidRequest;

NDIS_STATUS MiniportDirectOidRequest(
  [in] NDIS_HANDLE MiniportAdapterContext,
  [in] PNDIS_OID_REQUEST OidRequest
)
{...}

パラメーター

[in] MiniportAdapterContext

ミニポート ドライバーがそのミニポート 初期化Ex 関数で割り当てたコンテキスト領域へのハンドル。 ミニポート ドライバーは、ミニポート アダプターの状態情報を維持するこのコンテキスト領域を使用します。

[in] OidRequest

ミニポート ドライバーが処理 するバッファーと要求パケットの両方を含むNDIS_OID_REQUEST構造体へのポインター。 要求に応じて、ドライバーは、指定された構造体で要求された情報を返します。

戻り値

MiniportDirectOidRequest は、次のいずれかの状態値を返すことができます。

リターン コード 説明
NDIS_STATUS_SUCCESS
ミニポート ドライバーは、要求に応じてデータを設定または取得します。
NDIS_STATUS_PENDING
ミニポート ドライバーは、非同期的に要求を完了します。 ミニポート ドライバーがすべての処理を完了した後、 を呼び出す必要があります。要求が完了したことを NDIS に通知する NdisMDirectOidRequestComplete 関数。
NDIS_STATUS_INVALID_OID
OidRequest が指定した要求が無効であるか、認識されませんでした。
NDIS_STATUS_NOT_SUPPORTED
OidRequest が指定した要求が認識されましたが、ミニポート ドライバーではサポートされていません。
NDIS_STATUS_BUFFER_TOO_SHORT
OidRequest が提供するバッファーが小さすぎて、要求されたデータを保持できませんでした。
NDIS_STATUS_INVALID_LENGTH
OidRequest のNDIS_OID_REQUEST構造体の InformationBufferLength メンバーで指定された値が、指定したOID_Xxx コードに対して正しくありません。
NDIS_STATUS_INVALID_DATA
OidRequest で要求に指定された 1 つ以上のパラメーターが無効でした。
NDIS_STATUS_NOT_ACCEPTED
を呼び出した後、 ミニポートDevicePnPEventNotify 関数は、ドライバーの MiniportHaltEx 関数と呼ばれる突然の削除を示します。 NDIS が MiniportHaltEx を呼び出す前に、ドライバーが OID 要求を受信した場合は、状態値が NDIS_STATUS_NOT_ACCEPTED ですぐにこのような要求を完了する必要があります。
NDIS_STATUS_REQUEST_ABORTED
ミニポート ドライバーは、要求の処理を停止しました。 たとえば、NDIS は MiniportResetEx 関数と呼ばれます。
NDIS_STATUS_INDICATION_REQUIRED
ミニポート ドライバーは、後続の状態を示す OID 完了状態を提供します。 ミニポート ドライバーは、特定の OID がそれを許可しない限り、NDIS_STATUS_INDICATION_REQUIREDを返すことができません。 この状態が許可されているかどうかを確認するには、OID リファレンス ページを参照してください。 NDIS_STATUS_INDICATION_REQUIREDの詳細については、「 NDIS_OID_REQUESTNDIS_STATUS_INDICATION」を参照してください。

注釈

MiniportDirectOidRequest は省略可能な関数です。 ミニポート ドライバーは、直接 OID 要求を処理する場合、この関数を登録します。 ドライバーは、 を呼び出すときに 、MiniportDirectOidRequest エントリ ポイントを指定します。 NdisMRegisterMiniportDriver 関数。 を登録するミニポート ドライバー MiniportCancelDirectOidRequest 関数は 、MiniportDirectOidRequest も登録する必要があります。

NDIS は、独自の代わりに 、または NdisDirectOidRequest 関数を呼び出したバインドされたプロトコル ドライバーの代わりに、 MiniportDirectOidRequest 関数を 呼び出します。 ミニポート ドライバーは、 OidRequest パラメーターで指定された要求を調べて、要求されたアクションを実行する必要があります。

NDIS は OidRequest で OID 固有の内容を検証しないことに注意してください。 したがって、ドライバー自体は、これらの内容を検証する必要があります。 ドライバーが設定する値が範囲外であると判断した場合は、要求を失敗させ、NDIS_STATUS_INVALID_DATAを返す必要があります。

NDIS は、他の OID 要求と 共に MiniportDirectOidRequest に送信する要求をシリアル化しません。 ミニポート ドライバーは、MiniportOidRequest または MiniportDirectOidRequest に送信される他の要求が未処理の場合に、MiniportDirectOidRequest への複数の呼び出しを処理できる必要があります。

メモNDIS チェック-for-hang ロジックは、ミニポート ドライバーが MiniportOidRequest 呼び出しのコンテキストで待機している場合に応答しないミニポート ドライバーをリセットしません。 したがって、ミニポート ドライバーは、ハードウェア操作が MiniportOidRequest 呼び出しのコンテキスト内から完了するまで待機しないでください。 代わりに、ドライバーはNDIS_STATUS_PENDINGを返し、作業項目をキューに登録できます。
 
NDIS は IRQL <= DISPATCH_LEVEL で MiniportDirectOidRequest を呼び出します。

MiniportDirectOidRequest 関数を定義するには、まず、定義する関数の型を識別する関数宣言を指定する必要があります。 Windows には、ドライバーの関数型のセットが用意されています。 関数の種類を使用して関数を宣言すると、 ドライバーのコード分析静的ドライバー検証ツール (SDV)、およびその他の検証ツールでエラーが検出され、Windows オペレーティング システム用のドライバーを記述するための要件になります。

たとえば、" MyDirectOidRequest" という名前の MiniportDirectOidRequest 関数を定義するには、次のコード例に示すように 、MINIPORT_DIRECT_OID_REQUEST 型を使用します。

MINIPORT_DIRECT_OID_REQUEST MyDirectOidRequest;

次に、次のように関数を実装します。

_Use_decl_annotations_
NDIS_STATUS
 MyDirectOidRequest(
    NDIS_HANDLE  MiniportAdapterContext,
    PNDIS_OID_REQUEST  OidRequest
    )
  {...}

MINIPORT_DIRECT_OID_REQUEST関数の種類は、Ndis.h ヘッダー ファイルで定義されています。 コード分析ツールを実行するときにエラーをより正確に識別するには、 Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations注釈を使用すると、ヘッダー ファイル内のMINIPORT_DIRECT_OID_REQUEST関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「NDIS ドライバーの関数 ロール型を使用して関数を宣言する」を参照してください。

Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。

要件

要件
サポートされている最小のクライアント NDIS 6.1 以降でサポートされています。
対象プラットフォーム Windows
ヘッダー ndis.h (Ndis.h を含む)
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

MiniportCancelDirectOidRequest MiniportDevicePnPEventNotify

MiniportDirectOidRequest

MiniportHaltEx

MiniportInitializeEx

MiniportOidRequest

MiniportResetEx

NDIS_OID_REQUEST

NDIS_STATUS_INDICATION

NdisDirectOidRequest

NdisMDirectOidRequestComplete

NdisMRegisterMiniportDriver