FSCTL_SET_PURGE_FAILURE_MODE IOCTL (ntifs.h)
フィルター マネージャーは、FSCTL_SET_PURGE_FAILURE_MODE コントロール コードを使用して、データ スキャン用に作成されたセクションの有効期間中に操作を同期します。 フィルターでこのコントロール コードを発行しないでください。
メジャー コード
入力バッファー
SET_PURGE_FAILURE_MODE_INPUT 構造体。
入力バッファーの長さ
SET_PURGE_FAILURE_MODE_INPUTのバイト単位のサイズ。
出力バッファー
何一つ
出力バッファーの長さ
n/a
入力/出力バッファー
何一つ
入力/出力バッファーの長さ
n/a
状態ブロック
システム用に予約されています。
備考
フィルター マネージャーは、このコントロール コードをIRP_MJ_FILE_SYSTEM_CONTROL呼び出しと共に使用して、セクションの有効期間を角かっこで囲みます。 これらの呼び出しは、キャッシュ マネージャー キャッシュの消去に失敗した場合に、ファイル システム (およびまれにミニフィルター) に次の方法で動作するように指示するために機能します。
SET_PURGE_FAILURE_MODE_ENABLED セットで発行されたすべてのFSCTL_SET_PURGE_FAILURE_MODEに対して、SET_PURGE_FAILURE_MODE_DISABLED セットでFSCTL_SET_PURGE_FAILURE_MODEが発行されます。 未処理のSET_PURGE_FAILURE_MODE_ENABLEDがありますが、フィルター マネージャーは、特定の種類の操作の特定のエラー状態に対して次のように応答します (下の表を参照)。
- 操作にペンを付け、セクションの閉じ方を早めます (可能な場合)。
- エラーを発行したミニフィルターまたはファイル システムに操作を再キューします。
フィルター マネージャーがそれに応じて応答するようにトリガーするために、ファイル システム (またはフィルター) は、次の方法でセクションを消去できない場合に応答します。
操作 | 必要な戻り状態 |
---|---|
IRP_MJ_CREATE (破壊的操作) | STATUS_USER_MAPPED_FILE |
IRP_MJ_WRITE (バッファーなし操作のみ) | STATUS_PURGE_FAILED |
IRP_MJ_SET_INFORMATION | STATUS_PURGE_FAILED |
これらの状態は、未処理のSET_PURGE_FAILURE_MODE_ENABLEDがある場合にのみ返す必要があります (分散SET_PURGE_FAILURE_MODE_DISABLEDは受信されません)。 それ以外の場合は、エラーの状態がアプリケーションに返されます。
他の操作 (キャッシュされた書き込みなど) の場合、ファイル システム (またはフィルター) が未処理のFSCTL_SET_PURGE_FAILURE_MODEがある間にセクションを消去できない場合、未処理のFSCTL_SET_PURGE_FAILURE_MODEの数がゼロに減少したときに操作を保留し、再び実行する必要があります。 ファイルシステム (またはフィルター) がエラー状態 (上記を含む) を返すだけの場合、その状態がアプリケーションに返されます。
エラーの状態は、失敗した操作の再キューと同様に、フィルター マネージャー内で完全に処理されます。 つまり、どちらもフィルターには表示されません。これは、次の重要な影響を及ぼします。
- プロセス モニター などのファイル システム監視ツールでは、これらの操作は報告されません。
- 再発行された操作が成功するために上位のフィルターが必要な場合、再キューされた操作は失敗します。 この状況では、この 2 番目のフィルターがエラー状態を確実に返すために、フィルター ライターが必要です。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 8 |
ヘッダー | ntifs.h |