共用方式為


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_REASON_DATA_OVERWRITE 旗標新增至 USN 記錄。 不過,數據並未從使用者的觀點變更。 藉由在 SourceInfo 中記下 USN_SOURCE_DATA_MANAGEMENT 保留記錄之 USN_RECORD 結構的成員,您可以判斷雖然在專案上執行寫入作業,但數據尚未變更。

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
告訴 NTFS 在 USN 紀錄中撰寫的分頁寫入上設定指定的 UsnSourceInfo 值。 傳統上,這不會在分頁寫入上完成,因為系統不知道哪個線程做了指定的變更。 這是覆寫。 只有當記憶體管理員正在使用的 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 [僅限傳統型應用程式]
標頭 winioctl.h (包括 Windows.h)

另請參閱

FSCTL_MARK_HANDLE

USN_RECORD