RxFinalizeSrvOpen 関数 (fcb.h)
RxFinalizeSrvOpen は 、指定されたSRV_OPEN構造体を最終処理します。 呼び出し元には、SRV_OPENに関連付けられている FCB に対する排他ロックと、FCB に関連付けられているNET_ROOTの表ロックに対する共有ロックまたは排他ロックが必要です。
構文
BOOLEAN RxFinalizeSrvOpen(
[out] OUT PSRV_OPEN ThisSrvOpen,
[in] IN BOOLEAN RecursiveFinalize,
[in] IN BOOLEAN ForceFinalize
);
パラメーター
[out] ThisSrvOpen
最終処理するSRV_OPEN構造体へのポインター。
[in] RecursiveFinalize
ファイナライズを再帰的に行う必要があるかどうかを示す値。
[in] ForceFinalize
参照カウントに関係なく、ファイナライズを強制するかどうかを示す値。
ForceFinalize が FALSE の場合、SRV_OPENを終了するには、ThisSrvOpen によって指SRV_OPEN構造体の NodeReferenceCount メンバーが 0 である必要があります。
戻り値
RxFinalizeSrvOpen は、成功した場合は TRUE を 返し、最終処理が行われなかった場合は FALSE を 返します。
注釈
RxFinalizeSrvOpen ルーチンは、通常、ネットワーク ミニ リダイレクター ドライバーによって直接呼び出されません。 RDBSS は、SRV_OPENの参照カウントが 1 にデクリメントされたときに、このルーチンを内部的に呼び出します。 また、RxFinalizeNetFcb ルーチンが RecursiveFinalize を TRUE に設定して呼び出されると、RDBSS は RxFinalizeSrvOpen も呼び出します。 RDBSS は、IRP_MJ_CLOSEの I/O 要求パケットを受信したときに RxFinalizeNetFcb を呼び出します。 この IRP は通常、ファイルを閉じる操作を要求するユーザー モード アプリケーションに応答して RDBSS によって受信されます。 また、別のカーネル ドライバーがこのような IRP を発行することもできます。
RxFinalizeSrvOpen を呼び出す前に、呼び出し元は、SRV_OPENに関連付けられている FCB の排他ロックを取得し、FCB に関連付けられているNET_ROOTのテーブル ロックに対する共有ロックまたは排他ロックを取得している必要があります。
RecursiveFinalize パラメーターが TRUE の場合、RxFinalizeSrvOpen は、RecursiveFinalizeパラメーターを TRUE に設定し、ForceFinalize パラメーターを指定して RxFinalizeNetFobx を呼び出すことによって、このSRV_OPENに関連付けられている FOBX 構造体を最終処理します。
関連付けられた FCB の FcbState メンバーに FCB_STATE_ORPHANED フラグが設定されていない場合、 RxFinalizeSrvCall は、ネットワーク ミニ リダイレクターによって提供される MRxForceClosed ルーチンを呼び出して、SRV_CALLを終了します。 SRV_CALL構造体が FCB の作成の一部として最初に割り当てられなかった場合は、SRV_CALL構造体のメモリも解放されます。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | fcb.h (Mrxfcb.h、Fcb.h を含む) |
IRQL | <= APC_LEVEL |