FltDecodeParameters 関数 (fltkernel.h)

FltDecodeParameters は、I/O 操作のメモリ記述子リスト (MDL) アドレス、バッファー ポインター、バッファー長、および必要なアクセス パラメーターへのポインターを返します。 これにより、ミニフィルター ドライバーは switch ステートメントを使用して、複数の操作の種類の MDL アドレス、バッファー ポインター、バッファー長、および必要なアクセスにアクセスするヘルパー ルーチン内のこれらのパラメーターの位置を検索できなくなります。

構文

NTSTATUS FLTAPI FltDecodeParameters(
  [in]            PFLT_CALLBACK_DATA CallbackData,
  [out]           PMDL               **MdlAddressPointer,
  [out]           PVOID              **Buffer,
  [out]           PULONG             *Length,
  [out, optional] LOCK_OPERATION     *DesiredAccess
);

パラメーター

[in] CallbackData

I/O 操作のコールバック データ (FLT_CALLBACK_DATA) 構造体へのポインター。

[out] MdlAddressPointer

コールバック データ パラメーター (FLT_PARAMETERS) 構造体の MdlAddress (または OutputMdlAddress) メンバーへのポインターを受け取る呼び出し元が指定した変数へのポインター (このメンバー自体はポインターであることに注意してください)。 このパラメーターは省略可能であり、 NULL にすることができます。 I/O 操作に MDL フィールドがない場合、このパラメーターは NULL を受け取ります。

[out] Buffer

コールバック データ パラメーター構造体内の適切なバッファー メンバー (主要な関数コードに応じて) へのポインターを受け取る呼び出し元が指定した変数へのポインター (このメンバー自体はポインターであることに注意してください)。

[out] Length

コールバック データ パラメーター構造体のバッファー長メンバーへのポインターを受け取る呼び出し元が指定した変数へのポインター。 操作に長さフィールドがない場合、このパラメーターは NULL を受け取ります。

[out, optional] DesiredAccess

この種類の I/O 操作 (IoReadAccess、IoWriteAccess、または IoModifyAccess のいずれか) に適したアクセスの種類を受け取る呼び出し元が指定した変数へのポインター。 IoReadAccess は、ミニフィルター ドライバーがバッファーの内容を調べることができるが、その場所の内容を変更できないことを意味します。 IoWriteAccessIoModifyAccess は同等であり、ミニフィルター ドライバーがバッファーへの読み取りと書き込みのアクセス権を持っていることを意味します。

戻り値

FltDecodeParameters は 、次のようなSTATUS_SUCCESSまたは適切な NTSTATUS 値を返します。

リターン コード 説明
STATUS_INVALID_PARAMETER コールバック データ (FLT_CALLBACK_DATA) 構造体は、バッファー パラメーターを持たない I/O 操作を表します。 これはエラー コードです。

注釈

FltDecodeParameters は、パラメーター値ではなく I/O 操作のパラメーターへのポインターを返し、必要に応じて呼び出し元がパラメーターの値を変更できるようにします。

FltDecodeParameters は、高速 I/O 操作と IRP ベースの操作に使用できます。 ファイル システム フィルター (FSFilter) コールバック操作には意味がありません。これらの操作にはバッファー パラメーターがないためです。

IOCTL および FSCTL 操作には、使用されるバッファリング方法に応じて、1 つまたは 2 つのバッファーを含めることができます。 操作に 2 つのバッファー (および 2 つの長さのフィールド) がある場合、 FltDecodeParameters は必要に応じて OutputBufferOutputBufferLength、または OutputMdlAddress フィールドを返します。

I/O 操作ごとに 4 つのパラメーターすべてが返されるわけではありません。 たとえば、IRP_MJ_READ要求の場合、 FltDecodeParameters は 出力パラメーターを次のように設定します。

パラメーター
MdlAddressPointer &(CallbackData-Iopb-Parameters.Read.MdlAddress>>)
バッファー &(CallbackData-Iopb-Parameters.Read.ReadBuffer>>)
Length &(CallbackData-Iopb-Parameters.Read.Length>>)
DesiredAccess IoWriteAccess

要件

要件
対象プラットフォーム ユニバーサル
Header fltkernel.h (Fltkernel.h を含む)
Library FltMgr.lib
IRQL 任意のレベル

こちらもご覧ください

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltLockUserBuffer