次の方法で共有


PFREE_FUNCTION 関数ポインター

ファイル システム レガシ フィルター ドライバーは、PFREE_FUNCTION 型ルーチンをフィルターの FreeCallback コールバック ルーチンとして登録できます。 ファイル システムが FsRtlTeardownPerFileContexts を使用してファイル コンテキスト オブジェクトを削除するか、FsRtlTeardownPerStreamContexts を使用してストリーム コンテキスト オブジェクトを削除すると、ファイル システムは FreeCallback を呼び出します。

FREE_FUNCTION 型を使用してコールバック ルーチンを宣言する必要があります。 詳しくは「解説」セクションの例をご覧ください。

構文

typedef VOID ( *FreeCallback)(
  _In_ PVOID Buffer
);

パラメーター

戻り値

なし

解説

ファイル システムは、ファイルのファイルごとのコンテキスト オブジェクトを破棄するときに、FsRtlTeardownPerFileContexts を呼び出す必要があります。 このルーチンは、ファイルに関連付けられているすべてのファイルごとのコンテキスト構造の FreeCallback ルーチンを呼び出します。 このコールバック ルーチンは、FSRTL_PER_FILE_CONTEXT オブジェクトに使用されるすべてのメモリと関連するコンテキスト情報を解放する必要があります。 これは、FsRtlTeardownPerStreamContexts が呼び出され、FreeCallbackFSRTL_PER_STREAM_CONTEXT オブジェクトに使用されるメモリを解放する場合にも、ストリームごとのコンテキストの場合です。

FreeCallback の呼び出し中にファイルごとのコンテキスト オブジェクトまたはストリームごとのコンテキスト オブジェクトへのアクセスの同期については、FsRtlTeardownPerFileContextsFsRtlTeardownPerStreamContexts に関するページを参照してください。

Note

FreeCallback ルーチンは、ファイル システムを再帰的に呼び出したり、ファイル システム リソースを取得したりすることはできません。

MyFreeFunction という名前の FreeCallback コールバック関数を定義するには、まず「静的ドライバー検証ツール (SDV) 」およびその他の検証ツールで必要な関数宣言を次のように指定する必要があります。

FREE_FUNCTION MyFreeFunction;

次に、コールバック関数を次のように実装します。

VOID
 MyFreeFunction (
 __in PVOID Buffer
    )
  {...}

要件

要件タイプ 要件
サポートされている最小のクライアント Windows Vista
ヘッダー Wdm.h (Wdm.h または Ntddk.h を含みます)
IRQL <= APC_LEVEL

関連項目

FsRtlTeardownPerFileContexts

FsRtlTeardownPerStreamContexts

FSRTL_PER_FILE_CONTEXT

FSRTL_PER_STREAM_CONTEXT

レガシ ファイル システム フィルター ドライバー内のファイル別コンテキストの追跡

レガシ ファイル システム フィルター ドライバー内のストリーム別コンテキストの追跡