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

NDIS は、フィルター ドライバーの FilterOidRequest 関数を呼び出して、指定したフィルター モジュールに関連付けられている OID 要求を処理します。

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

構文

FILTER_OID_REQUEST FilterOidRequest;

NDIS_STATUS FilterOidRequest(
  [in] NDIS_HANDLE FilterModuleContext,
  [in] PNDIS_OID_REQUEST OidRequest
)
{...}

パラメーター

[in] FilterModuleContext

この要求のターゲットであるフィルター モジュールのコンテキスト領域へのハンドル。 フィルター ドライバーは、 FilterAttach 関数でこのコンテキスト領域を作成および初期化しました。

[in] OidRequest

OID_XXX コードを含む要求された操作を指定するNDIS_OID_REQUEST構造体へのポインター。 構造体では、OID クエリ要求または OID セット要求のいずれかを指定できます。 OID の詳細については、「 NDIS OID」を参照してください。

戻り値

FilterOidRequest は、次のいずれかの状態値を返します。

リターン コード 説明
NDIS_STATUS_SUCCESS
FilterOidRequest は、このフィルター モジュールのフィルター ドライバーのクエリまたは設定操作を正常に完了しました。
NDIS_STATUS_PENDING
フィルター ドライバーが要求を非同期的に完了することを示します。 ドライバーが要求を完了したら、 を呼び出す必要があります。 NdisFOidRequestComplete 関数を使用して、要求が完了したことを NDIS に通知します。
NDIS_STATUS_INVALID_OID
OidRequest で指定された要求が無効であるか、認識されていないことを示します。
NDIS_STATUS_NOT_SUPPORTED
FilterOidRequest は OID をサポートしていません。OID は省略可能です。
NDIS_STATUS_BUFFER_TOO_SHORT
OidRequest で指定されたバッファーが、要求されたデータを保持するには小さすぎることを示します。
NDIS_STATUS_INVALID_LENGTH
クエリ操作の場合、NDIS_OID_REQUEST構造体の InformationBufferLength メンバーは、指定された OID に必要な長さと一致しません。 FilterOidRequest は、NDIS_OID_REQUEST構造体の BytesNeeded メンバーに必要なバッファー サイズ (バイト単位) を返しました。
NDIS_STATUS_INVALID_DATA
設定操作の場合、NDIS_OID_REQUEST構造体の InformationBuffer メンバーに指定されたデータが、指定された OID に対して無効でした。
NDIS_STATUS_NOT_ACCEPTED
FilterOidRequest は要求された情報を収集しようとしましたが、失敗しました。
NDIS_STATUS_RESOURCES
リソースが不足しているため、FilterOidRequest が失敗しました。
NDIS_STATUS_FAILURE
FilterOidRequest は、 上記の値が適用されない場合にNDIS_STATUS_FAILUREを返します。 フィルター ドライバーは、エラーの理由を指定するパラメーターを使用して NdisWriteErrorLogEntry 関数を呼び出す必要があります。

注釈

FilterOidRequest は省略可能な関数です。 フィルター ドライバーが OID 要求を使用しない場合、NdisFRegisterFilterDriver 関数を呼び出すときに、この関数のエントリ ポイントを NULL に設定できます。 フィルター ドライバーで FilterOidRequestComplete 関数を定義する場合は、 FilterOidRequest 関数を指定する必要があります。

NDIS は、フィルター ドライバーの FilterOidRequest 関数を呼び出して、基になるドライバーによって生成された OID 要求を処理します。 フィルター ドライバーは、 NdisFOidRequest 関数を呼び出すことによって、基になるドライバーにこのような要求を転送できます。

ドライバーが NdisFOidRequest を呼び出す前に、ドライバーは NDIS_OID_REQUEST 構造体を割り当て、 NdisAllocateCloneOidRequest を呼び出して要求情報を新しい構造体に転送する必要があります。 オプションとして、フィルター ドライバーは要求を転送せずにすぐに要求を完了できます。

要求を同期的に完了するために、フィルター ドライバーはNDIS_STATUS_SUCCESSまたはエラー状態を返します。 ドライバーがNDIS_STATUS_PENDINGを返す場合は、 NdisFOidRequestComplete 関数を呼び出して、要求が完了したことを NDIS に通知する必要があります。

クエリ操作の場合、 FilterOidRequestInformationBuffer メンバーで要求された情報を返し、NDIS_OID_REQUEST構造体の BytesWritten メンバー内の変数を、返される情報の量に設定します。 基になるドライバーは、フィルター ドライバーが NdisFOidRequest で要求を渡した場合にこれを行います。

設定操作の場合、 FilterOidRequest は、NDIS_OID_REQUEST構造体の InformationBuffer メンバー内のデータを使用して、指定された OID に必要な情報を設定できます。 この場合、 FilterOidRequestBytesRead の変数を、使用した指定されたデータの量に設定します。 基になるドライバーは、フィルター ドライバーが NdisFOidRequest で要求を渡した場合にこれを行います。

ミニポート ドライバーと同様に、フィルター ドライバーは一度に 1 つの要求のみを受信できます。 NDIS は、フィルター ドライバーに送信する要求をシリアル化します。 フィルター ドライバーが現在の要求を完了する前に、NDIS は FilterOidRequest を呼び出すことができません。

NDIS は、IRQL <= DISPATCH_LEVEL で FilterOidRequest を呼び出します。

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

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

FILTER_OID_REQUEST MyOidRequest;

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

_Use_decl_annotations_
NDIS_STATUS
 MyOidRequest(
    NDIS_HANDLE  FilterModuleContext,
    PNDIS_OID_REQUEST  OidRequest
    )
  {...}

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

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

要件

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

こちらもご覧ください

FilterAttach

NDIS_OID_REQUEST

NdisAllocateCloneOidRequest

NdisFOidRequest

NdisFOidRequestComplete

NdisWriteErrorLogEntry