PFREE_FUNCTION 関数ポインター
ファイル システム レガシ フィルター ドライバーは、PFREE_FUNCTION 型ルーチンをフィルターの FreeCallback コールバック ルーチンとして登録できます。 ファイル システムが FsRtlTeardownPerFileContexts を使用してファイル コンテキスト オブジェクトを削除するか、FsRtlTeardownPerStreamContexts を使用してストリーム コンテキスト オブジェクトを削除すると、ファイル システムは FreeCallback を呼び出します。
FREE_FUNCTION 型を使用してコールバック ルーチンを宣言する必要があります。 詳しくは「解説」セクションの例をご覧ください。
構文
typedef VOID ( *FreeCallback)(
_In_ PVOID Buffer
);
パラメーター
- Buffer [in]: 解放する FSRTL_PER_FILE_CONTEXT または FSRTL_PER_STREAM_CONTEXT 構造体へのポインター。
戻り値
なし
解説
ファイル システムは、ファイルのファイルごとのコンテキスト オブジェクトを破棄するときに、FsRtlTeardownPerFileContexts を呼び出す必要があります。 このルーチンは、ファイルに関連付けられているすべてのファイルごとのコンテキスト構造の FreeCallback ルーチンを呼び出します。 このコールバック ルーチンは、FSRTL_PER_FILE_CONTEXT オブジェクトに使用されるすべてのメモリと関連するコンテキスト情報を解放する必要があります。 これは、FsRtlTeardownPerStreamContexts が呼び出され、FreeCallback が FSRTL_PER_STREAM_CONTEXT オブジェクトに使用されるメモリを解放する場合にも、ストリームごとのコンテキストの場合です。
FreeCallback の呼び出し中にファイルごとのコンテキスト オブジェクトまたはストリームごとのコンテキスト オブジェクトへのアクセスの同期については、FsRtlTeardownPerFileContexts と FsRtlTeardownPerStreamContexts に関するページを参照してください。
Note
FreeCallback ルーチンは、ファイル システムを再帰的に呼び出したり、ファイル システム リソースを取得したりすることはできません。
MyFreeFunction という名前の FreeCallback コールバック関数を定義するには、まず「静的ドライバー検証ツール (SDV) 」およびその他の検証ツールで必要な関数宣言を次のように指定する必要があります。
FREE_FUNCTION MyFreeFunction;
次に、コールバック関数を次のように実装します。
VOID
MyFreeFunction (
__in PVOID Buffer
)
{...}
要件
要件タイプ | 要件 |
---|---|
サポートされている最小のクライアント | Windows Vista |
ヘッダー | Wdm.h (Wdm.h または Ntddk.h を含みます) |
IRQL | <= APC_LEVEL |
関連項目
FsRtlTeardownPerStreamContexts