MARK_HANDLE_INFO構造体 (winioctl.h)

指定したファイルまたはディレクトリ、およびその更新シーケンス番号 (USN) 変更ジャーナル レコードと変更に関するデータをマークするために使用される情報を格納します。 これは、FSCTL_MARK_HANDLE コントロール コードによって使用されます。

構文

typedef struct _MARK_HANDLE_INFO {
  union {
    DWORD UsnSourceInfo;
    DWORD CopyNumber;
  } DUMMYUNIONNAME;
  DWORD  UsnSourceInfo;
  HANDLE VolumeHandle;
  DWORD  HandleInfo;
} MARK_HANDLE_INFO, *PMARK_HANDLE_INFO;

メンバー

DUMMYUNIONNAME

DUMMYUNIONNAME.UsnSourceInfo

DUMMYUNIONNAME.CopyNumber

UsnSourceInfo

行われる変更の種類。

この操作では、ファイルまたはディレクトリを作成したアプリケーションの観点から外部から変更されることはありません。

スレッドが新しい USN レコードを書き込むとき、前のレコードのソース情報フラグは、スレッドもそれらのフラグを設定した場合にのみ存在し続けます。 したがって、ソース情報構造を使用すると、アプリケーションは、ウイルス対策フィルターなど、既知のソースによってのみ設定された USN レコードを除外できます。

次の値が定義されています。

意味
USN_SOURCE_DATA_MANAGEMENT
0x00000001
この操作は、オペレーティング システムによって行われたファイルまたはディレクトリの変更に関する情報を提供します。

一般的な用途は、リモート ストレージが外部ストレージからローカル ストレージにデータを移動する場合です。 リモート ストレージは、階層型ストレージ管理ソフトウェアです。 通常、このような移動では、USN レコードに USN_REASON_DATA_OVERWRITE フラグが追加されます。 ただし、データはユーザーの観点から変更されていません。 レコードを保持する USN_RECORD 構造体の SourceInfo メンバーに USN_SOURCE_DATA_MANAGEMENT を記録すると、書き込み操作はアイテムに対して実行されますが、データは変更されていないことを確認できます。

USN_SOURCE_AUXILIARY_DATA
0x00000002
この操作により、プライベート データ ストリームがファイルまたはディレクトリに追加されます。

たとえば、チェックサム情報を追加するウイルス検出機能があります。 ウイルス検出機能が項目を変更すると、システムによって USN レコードが生成されます。 USN_SOURCE_AUXILIARY_DATA は、変更によってアプリケーション データが変更されなかったことを示します。

USN_SOURCE_REPLICATION_MANAGEMENT
0x00000004
この操作により、レプリケートされたファイルの内容が作成または更新されます。

たとえば、ファイル レプリケーション サービスは、レプリケートされたディレクトリ内のファイルを作成または更新するときに、このフラグを設定します。

USN_SOURCE_CLIENT_REPLICATION_MANAGEMENT
0x00000008
レプリケーションは、クラウドまたはサーバーからクライアント システムで実行されています。

VolumeHandle

ファイルまたはディレクトリが存在するボリュームへのボリューム ハンドル。 ボリューム ハンドルの取得の詳細については、「解説」セクションを参照してください。

この操作の特権をチェックするには、このハンドルが必要です。

呼び出し元には 、SE_MANAGE_VOLUME_NAME 特権が必要です。 詳細については、「 特権」を参照してください。

HandleInfo

VolumeHandle メンバーのハンドル値によって識別されるファイルまたはディレクトリに関する追加情報を指定するフラグ。

意味
MARK_HANDLE_PROTECT_CLUSTERS
0x00000001
ファイルは、ハンドルが閉じられるまでデフラグできないとマークされます。

MARK_HANDLE_PROTECT_CLUSTERSマークされたハンドルが閉じられると、ファイルのクラスターが移動しないという保証はありません。

MARK_HANDLE_TXF_SYSTEM_LOG
0x00000004
ファイルは、ハンドルが閉じられるまでデフラグできないとマークされます。

Windows Server 2003: このフラグは、Windows Server 2003 SP1 までサポートされていません。

Windows XP: このフラグはサポートされていません。

MARK_HANDLE_NOT_TXF_SYSTEM_LOG
0x00000008
ファイルは、ハンドルが閉じられるまでデフラグできないとマークされます。

Windows Server 2003: このフラグは、Windows Server 2003 SP1 までサポートされていません。

Windows XP: このフラグはサポートされていません。

MARK_HANDLE_REALTIME
0x00000020
ファイルは、実際のファイルの種類に関係なく、リアルタイムの読み取り動作としてマークされます。 このフラグでマークされたファイルは、 バッファーされていない I/O 用に開く必要があります。

Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: このフラグはサポートされていません。

MARK_HANDLE_NOT_REALTIME
0x00000040
以前に MARK_HANDLE_REALTIME フラグを使用してリアルタイム読み取り動作としてマークされたファイルは、このフラグを使用してマークを解除でき、リアルタイムの動作は削除されます。 このフラグでマークされたファイルは、 バッファーされていない I/O 用に開く必要があります。

Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: このフラグはサポートされていません。

MARK_HANDLE_READ_COPY
0x00000080
CopyNumber メンバーで指定されたコピー番号を読み取りに使用する必要があることを示します。 このフラグでマークされたファイルは、 バッファーされていない I/O 用に開く必要があります。

Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: このフラグは、Windows 8してWindows Server 2012するまでサポートされません。

MARK_HANDLE_NOT_READ_COPY
0x00000100
以前に MARK_HANDLE_READ_COPY フラグを使用して読み取り/コピー動作としてマークされたファイルは、このフラグを使用してマークを解除でき、読み取り/コピー動作は削除されます。 このフラグでマークされたファイルは、 バッファーされていない I/O 用に開く必要があります。

Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: このフラグは、Windows 8してWindows Server 2012するまでサポートされません。

MARK_HANDLE_RETURN_PURGE_FAILURE
0x00000400
キャッシュされていない IO とマップ/キャッシュされたメモリ IO を混在させると、キャッシュされていない IO が発行されると、キャッシュされていない IO の範囲のメモリ マッピングが消去されます。 これらの消去が失敗した場合、システムは通常、破損状態につながる可能性がある呼び出し元に障害を返しません (このため、ドキュメントではこれを行わないと記載されています)。 このフラグは、アプリケーションがこの状況をより適切に処理できるように、指定されたハンドルの消去エラーを返すようにシステムに指示します

このフラグは、Windows 8してWindows Server 2012するまでサポートされません。

MARK_HANDLE_DISABLE_FILE_METADATA_OPTIMIZATION
0x00001000
NTFS の高度に断片化されたファイルは、複数の MFT レコードを使用して、ファイルのすべてのエクステントを記述します。 この子 MFT レコードの一覧 (FRS レコードとも呼ばれます) は、属性リストと呼ばれる構造体によって制御されます。 属性リストのサイズは 128K に制限されています。 属性リストのサイズが特定のしきい値に達すると、NTFS によってエクステントのバックグラウンド圧縮がトリガーされ、子 FRS レコードの最小数が使用されます。 このフラグは、指定されたファイルに対するこの FRS 圧縮機能を無効にします。

このフラグは、Windows 10されるまでサポートされません。

MARK_HANDLE_ENABLE_USN_SOURCE_ON_PAGING_IO
0x00002000
USN ジャーナルのページング書き込み時に、指定された UsnSourceInfo 値を設定するように NTFS に指示します。 従来、これはページング書き込みでは実行されませんでした。これは、指定された変更を行ったスレッドがシステムで認識されなかったためです。 これはオーバーライドです。 これは、メモリ マネージャーが使用している FileObject にこの状態が関連付けられている場合にのみ機能します。

このフラグは、Windows 10されるまでサポートされません。

MARK_HANDLE_SKIP_COHERENCY_SYNC_DISALLOW_WRITES
0x00004000
このフラグを設定すると、このファイルでの書き込みが許可されないことがシステムに通知されます。 アプリケーションが書き込みアクセスのためにファイルを開こうとすると、STATUS_ACCESS_DENIEDで操作が失敗します。 書き込みが見られた場合、操作は STATUS_MARKED_TO_DISALLOW_WRITES で失敗します

このフラグは、Windows 10するまでサポートされません。

注釈

ボリュームへのハンドルを取得するには、 lpFileName パラメーターを次の形式の文字列に設定して CreateFile を呼び出します。

"\.\X:"

前の文字列では、 X はボリュームが表示されるドライブを識別する文字です。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
Header winioctl.h (Windows.h を含む)

こちらもご覧ください

FSCTL_MARK_HANDLE

USN_RECORD