Share via


FltGetSwappedBufferMdlAddress 関数 (fltkernel.h)

FltGetSwappedBufferMdlAddress ルーチンは、ミニフィルター ドライバーによってスワップされたバッファーのメモリ記述子リスト (MDL) アドレスを返します。

構文

PMDL FltGetSwappedBufferMdlAddress(
  [in] PFLT_CALLBACK_DATA CallbackData
);

パラメーター

[in] CallbackData

操作のコールバック データ構造へのポインター。

戻り値

FltGetSwappedBufferMdlAddress は、呼び出し元によってスワップされたバッファーの MDL アドレスを返します。 FltGetSwappedBufferMdlAddress は、次の場合に NULL を 返します。

  • 操作は高速 I/O 操作です。 高速 I/O 操作では、バッファーに MDL を含めることはできません。
  • 呼び出し元によってスワップされたバッファーに MDL がありません。
  • ミニフィルター ドライバーは、事前操作コールバック ルーチン内のバッファーをスワップしませんでした。

注釈

事前操作コールバック ルーチンの新しいバッファーでスワップするミニフィルター ドライバーは、対応する postoperation コールバック ルーチンから FltGetSwappedBufferMdlAddress を呼び出すことによって、バッファーの MDL アドレスを取得できます。

FltGetSwappedBufferMdlAddress ルーチンは、呼び出し元の事前操作コールバック ルーチンによってスワップされたのではなく、元のバッファーと MDL アドレスを含むコールバック データ構造体を受け取るため、必要です。

呼び出し元がスワップインしたバッファーの MDL を作成しなかった場合でも、 FltGetSwappedBufferMdlAddressNULL 以外の MDL 値を返す可能性があります。 これは、ミニフィルター ドライバー、レガシ フィルター ドライバー、またはミニフィルター ドライバーまたはファイル システム ドライバー スタックの呼び出し元の下にあるファイル システム ドライバーによって、バッファーの MDL が作成されるときに発生します。

FltGetSwappedBufferMdlAddress は、呼び出し元がその事前操作コールバック ルーチンの新しいバッファーでスワップしなかった場合でも、NULL 以外の MDL 値を返すこともできます。 これは、ページング I/O などの操作で発生します。バッファーは NULL で、呼び出し元は新しい MDL アドレスでスワップされます。

呼び出し元によってスワップされたバッファーの MDL は、操作後のコールバック ルーチンが返されるときに、フィルター マネージャーによって自動的に解放されます。 この MDL が解放されないようにするには、 FltRetainSwappedBufferMdlAddress を呼び出します。

FltGetSwappedBufferMdlAddress は、操作後のコールバック ルーチンからのみ呼び出すことができます。

要件

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

こちらもご覧ください

FltDecodeParameters

FltRetainSwappedBufferMdlAddress