RxFinalizeNetFcb 関数 (rxprocs.h)
RxFinalizeNetFCB は、指定された FCB 構造体を最終処理します。 呼び出し元には、FCB に関連付けられているNET_ROOTに対する排他ロックが必要です。
構文
BOOLEAN RxFinalizeNetFcb(
[out] OUT PFCB ThisFcb,
[in] IN BOOLEAN RecursiveFinalize,
[in] IN BOOLEAN ForceFinalize,
[in] IN LONG ReferenceCount
);
パラメーター
[out] ThisFcb
最終処理する FCB 構造体へのポインター。
[in] RecursiveFinalize
ファイナライズを再帰的に行う必要があるかどうかを示す値。
[in] ForceFinalize
参照カウントに関係なく、ファイナライズを強制するかどうかを示す値。
このパラメーターが FALSE の場合、FCB を最終処理するには、FCB の NodeReferenceCount メンバーを 1 にする必要があります。
[in] ReferenceCount
強制ファイナライズを引き続き許可する FCB の参照カウント。
戻り値
RxFinalizeNetFCB は成功すると TRUE を 返し、ファイナライズが行われなかった場合は FALSE を 返します。
注釈
RxFinalizeNetFCB ルーチンは、通常、ネットワーク ミニ リダイレクター ドライバーによって直接呼び出されません。 RDBSS は、IRP_MJ_CLOSEの I/O 要求パケットを受信すると、このルーチンを内部的に呼び出します。 この IRP は通常、ファイルを閉じる操作を要求するユーザー モード アプリケーションに応答して RDBSS によって受信されます。 また、別のカーネル ドライバーがこのような IRP を発行することもできます。
RDBSS のクローズ処理戦略は、サーバー上のワークロードを可能な限り最小限に抑える必要があることを公理に基づいて行います。 同じファイルを繰り返し閉じて開くアプリケーションがいくつかあります (バッチ ファイルの処理など)。 このような場合は、同じファイルが開き、バッファーからの行が読み取られ、ファイルが閉じられ、同じ操作セットが何度も繰り返されます。
これは RDBSS では、クローズ要求の遅延処理によって処理されます。 要求の完了から close 要求での処理の開始までの間には、約 10 秒の遅延があります。 これにより、ウィンドウが開き、後続の開いている操作を既存のSRV_OPENに折りたたむことができます。 時間間隔は、これらの要件を満たすように調整できます。
RxFinalizeNetFCB を呼び出す前に、FCB 構造体のロックを排他モードで取得する必要があります。
RecursiveFinalize パラメーターが FALSE の場合、FCB への未処理の参照がある場合、RxFinalizeNetFCB は失敗します (FCB 構造体の OpenCount メンバーまたは CleanCount メンバーは 0 以外です)。
ForceFinalize パラメーターが TRUE の場合、RxFinalizeNetFCB はチェックされたビルドでシステムを ASSERT します。
再帰的なファイナライズの後、FCB に関連付けられた参照カウントは、さらなるファイナライズを行うために最大 1 になる可能性があります。 この最終的な参照カウントは、NET_ROOTのプレフィックス名テーブルに属します。 実際のファイナライズは、次の 2 つの部分に分かれています。
- 参照カウントが 1 に等しいか 、ForceFinalize パラメーターが TRUE の場合、 RxFinalizeNetFCB は FCB をファイナライズします。
- 参照カウントが 0 になると、FCB が終了し、FCB に使用されるメモリも解放されます。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | rxprocs.h (Rxprocs.h を含む) |
IRQL | <= APC_LEVEL |