次の方法で共有


FsRtlInitPerStreamContext マクロ (ntifs.h)

FsRtlInitPerStreamContext マクロは、フィルター ドライバーコンテキスト構造を初期化します。

構文

void FsRtlInitPerStreamContext(
   _fc,
   _owner,
   _inst,
   _cb
);

パラメーター

_fc

ファイル ストリームのコンテキスト情報を維持するために使用される呼び出し元によって割り当てられたFSRTL_PER_STREAM_CONTEXT構造体へのポインター。 この構造体は、そのまま使用することも、ドライバー定義のストリームごとのコンテキスト構造に埋め込んだりすることもできます。 どちらの構造体型も、一般的に ExAllocatePoolWithTag を呼び出すことによって割り当てられます。

_owner

ストリームごとのコンテキスト構造の所有者を一意に識別する呼び出し元割り当て変数へのポインター。 この変数の形式は、フィルター ドライバー固有です。 フィルター ライターは、ドライバー オブジェクトやデバイス オブジェクトのアドレスなど、意味のある便利な値を選択する必要があります。 呼び出し元は、このパラメーターに NULL 以外の値を指定する必要があります。

_inst

フィルター ドライバーへのポインター - 同じフィルター ドライバーによって作成されたストリームごとのコンテキスト構造を区別するために使用できる割り当てられた変数。 この変数の形式は、フィルター ドライバー固有です。 フィルター ライターは、ファイル ストリームのストリーム コンテキスト オブジェクトのアドレスなど、意味のある便利な値を選択する必要があります。 (ファイル オブジェクトからこのアドレスを取得するには、 FsRtlGetPerStreamContextPointer マクロを使用します)。このパラメーターは省略可能であり、 NULL にすることができます

_cb

ストリームごとのコンテキスト構造を解放するコールバック ルーチンへのポインター。 呼び出し元は、このパラメーターに NULL 以外の値を指定する必要があります。 このルーチンとそのパラメーターは、次のように定義されます。

typedef
VOID (*PFREE_FUNCTION) (
          IN PVOID Buffer
          );

バッファー

解放するストリームごとのコンテキスト構造へのポインター。 FreeCallback ルーチンは通常、このポインターを適切な構造体ポインター型にキャストし、ExFreePool を呼び出して解放します。

戻り値

なし

解説

ファイル システム フィルター ドライバーは 、FsRtlInitPerStreamContext マクロを使用して、新しく割り当てられたストリームごとのコンテキスト構造を初期化してから、ファイル ストリームに関連付けます。 初期化されたコンテキスト構造は、 FsRtlInsertPerStreamContext にパラメーターとして渡すことができます。

FsRtlInitPerStreamContext、FreeCallback ルーチンのアドレスを、FSRTL_PER_STREAM_CONTEXT構造体の FreeCallback メンバーに格納します。

FreeCallback ルーチンは、IRQL <= APC_LEVELで呼び出されます。 通常、IRQL PASSIVE_LEVELで呼び出されます。

メモFreeCallback ルーチンは、ファイル システムに再帰的に呼び出したり、ファイル システム リソースを取得したりすることはできません。 また、このルーチンは、ファイル ストリームのファイル オブジェクトが既に解放されていることを前提とする必要があります。
 
初期化されたストリームごとのコンテキスト構造をファイル ストリームに関連付けるには、 FsRtlInsertPerStreamContext を呼び出します。

コンテキスト構造がファイル ストリームに関連付けられた後は、 FsRtlLookupPerStreamContext を呼び出して取得するか、 FsRtlRemovePerStreamContext を呼び出して削除できます。

詳細については、「 レガシ ファイル システム フィルター ドライバーでの追跡 Per-Stream コンテキスト」を参照してください。

要件

要件
サポートされている最小のクライアント Windows XP;Windows 2000 Service Pack 4 (SP4) の更新プログラムのロールアップ
対象プラットフォーム デスクトップ
Header ntifs.h (Ntifs.h を含む)
IRQL 任意のレベル

こちらもご覧ください

ExAllocatePoolWithTag

ExFreePool

FSRTL_PER_STREAM_CONTEXT

FsRtlGetPerStreamContextPointer

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlRemovePerStreamContext

FsRtlSetupAdvancedHeader

FsRtlSupportsPerStreamContexts

FsRtlTeardownPerStreamContexts