FSRTL_PER_FILE_CONTEXT 構造体 (ntifs.h)
レガシ ファイル システム フィルター ドライバーは、 FSRTL_PER_FILE_CONTEXT 構造を使用して、ドライバー固有のコンテキスト情報を開いているファイルに関連付けることができます。
構文
typedef struct _FSRTL_PER_FILE_CONTEXT {
LIST_ENTRY Links;
PVOID OwnerId;
PVOID InstanceId;
PFREE_FUNCTION FreeCallback;
} FSRTL_PER_FILE_CONTEXT, *PFSRTL_PER_FILE_CONTEXT;
メンバー
Links
同じファイルに関連付けられているすべてのファイルごとのコンテキスト構造の一覧にある、この構造体のリンク。 FsRtlInsertPerFileContext は、ファイルのすべてのファイルごとのコンテキスト構造の一覧にこのメンバーを挿入します。
OwnerId
ファイルごとのコンテキスト構造の所有者を一意に識別する、フィルター ドライバーによって割り当てられたバッファーへのポインター。 この変数の形式は、フィルター ドライバー固有です。 フィルター ドライバーでは、このメンバーを NULL 以外の値に設定する必要があります。
InstanceId
同じフィルター ドライバーによって作成されたファイルごとのコンテキスト構造を区別するために使用できる、フィルター ドライバーによって割り当てられたバッファーへのポインター。 この変数の形式は、フィルター ドライバー固有です。 フィルター ドライバーは、このメンバーを NULL に設定できます。
FreeCallback
ファイルごとのコンテキスト構造を解放する コールバック ルーチン へのポインター。 フィルター ドライバーでは、このメンバーを NULL 以外の値に設定する必要があります。
注釈
コンテキスト情報をファイルに関連付けるために、レガシ フィルター ドライバーは最初に FSRTL_PER_FILE_CONTEXT 構造体を割り当て、 FsRtlInsertPerFileContext を使用して初期化します。 その後、ドライバーは FsRtlInsertPerFileContext を使用して 、そのFSRTL_PER_FILE_CONTEXT オブジェクトをファイルに関連付けます。 システムは、ファイルのファイル コンテキスト オブジェクトを破棄すると、fsRtlTeardownPerFileContexts を呼び出し、FSRTL_PER_FILE_CONTEXT オブジェクトで指定された FreeCallback ルーチンを呼び出します。 そのコールバックは、ドライバー固有のコンテキスト オブジェクトを解放する必要があります。
フィルター ライターは、ドライバー オブジェクトやデバイス オブジェクトのアドレスなど、意味のある便利な OwnerID 値を選択する必要があります。
フィルター ライターは、ファイルのファイル コンテキスト オブジェクトのアドレスなど、意味のある便利な InstanceID 値を選択する必要があります。 FsRtlGetPerFileContextPointer マクロを使用して、ファイル オブジェクトからそのアドレスを取得します。
FSRTL_PER_FILE_CONTEXT構造体は、そのまま使用することも、ドライバー定義のファイルごとのコンテキスト構造に埋め込んだりすることもできます。
FSRTL_PER_FILE_CONTEXT構造体は、ページ プールまたは非ページ プールから割り当てられます。
FsRtlInitPerFileContext マクロは、FSRTL_PER_FILE_CONTEXT構造体を初期化します。
パラメーター
FileContext
FSRTL_PER_FILE_CONTEXT
初期化するFSRTL_PER_FILE_CONTEXT オブジェクト。
OwnerId
PVOID
ファイルごとのコンテキスト構造の所有者を一意に識別するフィルター ドライバーによって割り当てられた変数へのポインター。 形式はフィルター ドライバー固有です。 このパラメーターには NULL 以外の値が必要です。
InstanceId
PVOID
ファイルごとのコンテキスト構造の所有者を一意に識別するフィルター ドライバーによって割り当てられた変数へのポインター。 形式はフィルター ドライバー固有です。 このパラメーターには NULL 以外の値が必要です。
FreeCallback
PFREE_FUNCTION
ファイルごとのコンテキスト構造を解放する コールバック ルーチン へのポインター。
戻り値
VOID
[なし] :
このマクロは、 FsRtlInsertPerFileContext を呼び出す前に使用する必要があります。
フィルター ライターは、ドライバー オブジェクトやデバイス オブジェクトのアドレスなど、意味のある便利な OwnerID 値を選択する必要があります。
フィルター ライターでは、ファイルのファイル コンテキスト オブジェクトのアドレスなど、意味のある便利な InstanceID 値を使用する必要があります。 FsRtlGetPerFileContextPointer マクロを使用して、ファイル オブジェクトからそのアドレスを取得します。
コンテキスト オブジェクトを使用して作成する方法の詳細については、「 レガシ ファイル システム フィルター ドライバーでの Per-File コンテキストの追跡」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista 以降で使用できます。 |
Header | ntifs.h (Fltkernel.h、Ntifs.h を含む) |