次の方法で共有


RxScavengeFobxsForNetRoot 関数 (scavengr.h)

RxScavengeFobxsForNetRoot は、特定のNET_ROOT構造体に関連付けられているすべての FOBX 構造体をスカベンジします。

構文

void RxScavengeFobxsForNetRoot(
  PNET_ROOT NetRoot,
  PFCB      PurgingFcb,
  BOOLEAN   SynchronizeWithScavenger
);

パラメーター

NetRoot

FOBX 構造体を清掃する必要があるNET_ROOT構造体へのポインター。

PurgingFcb

清掃が行われる FCB へのポインター。

SynchronizeWithScavenger

このルーチンをスカベンジャーと同期させる必要があるかどうかを指定するブール値。

戻り値

なし

解説

クリーンアップ時に、ファイル オブジェクトに関連付けられているユーザー ハンドルはこれ以上ありません。 このような場合、閉じるとクリーンアップの間の時間枠は、メモリ マネージャーとキャッシュ マネージャーによって維持される追加の参照によって決まります。 クリーンアップ時に、FOBX はクローズ・ペンディング・リストに入れられ、クローズ操作を受け取ったときに対応するリストから削除されます。 その間、開いている操作がACCESS_DENIED状態で失敗した場合、RDBSS は FOBX 構造体の消去と清掃を強制できます。 これは同期操作です。

ディレクトリの名前を変更するには、ディレクトリの下にあるすべてのファイルを閉じる必要があります。 そのため、ネットワーク ミニ リダイレクターは、ディレクトリの名前を変更するIRP_MJ_SET_INFORMATION要求に応答して、 RxPurgeRelatedFobxsRxScavengeFobxsForNetRoot を呼び出す場合があります。 ディレクトリのNET_ROOT構造体と NULL FCB を渡すことで、ディレクトリに関連付けられているすべての FOBX 構造体が消去され、清掃されます。

RxScavengeFobxsForNetRoot ルーチンは、スカベンジャー ミューテックスを取得し、スカベンジャー オブジェクトの FobxsToBeFinalized リスト メンバーを走査し、スカベンジャー オブジェクトの ScavengerFinalizationList メンバーの末尾に見つかったエントリを追加してから、ミューテックスを解放します。

PurgeingFcb NULL ではなく、この消去 FCB 構造体がスカベンジャー オブジェクトの FobxsToBeFinalized リスト メンバーの FOBX 構造体に関連付けられている FCB と同じでない場合、RxScavengeFobxsForNetRoot は、ネットワーク ミニ リダイレクターによって提供される MRxAreFilesAliased コールバック ルーチンを呼び出します (サポートされている場合)。 MRxAreFilesAliased の呼び出しは、PFCB が FOBX 構造体に関連付けられている FCB のエイリアスであるかどうかを判断するためのものです。

チェックされたビルドでは、 RxScavengeAllFobxs によってシステムが次の条件に対して ASSERT されます。

  • FOBX 構造体の NodeTypeCode メンバーがRDBSS_NTC_FOBXされていません。

要件

要件
対象プラットフォーム デスクトップ
Header scavengr.h (Rxprocs.h を含む)
IRQL <= APC_LEVEL

こちらもご覧ください

MRxAreFilesAliased

RxPurgeAllFobxs

RxPurgeRelatedFobxs

RxScavengeAllFobxs