共用方式為


USN_RECORD_V4結構 (winioctl.h)

包含更新序號的資訊, (USN) 變更日誌 4.0 版記錄。 2.0 和 3.0 版記錄是由 USN_RECORD_V2 (分別定義 USN_RECORD) 和 USN_RECORD_V3 結構。

語法

typedef struct {
  USN_RECORD_COMMON_HEADER Header;
  FILE_ID_128              FileReferenceNumber;
  FILE_ID_128              ParentFileReferenceNumber;
  USN                      Usn;
  DWORD                    Reason;
  DWORD                    SourceInfo;
  DWORD                    RemainingExtents;
  WORD                     NumberOfExtents;
  WORD                     ExtentSize;
  USN_RECORD_EXTENT        Extents[1];
} USN_RECORD_V4, *PUSN_RECORD_V4;

成員

Header

描述記錄長度、主要版本和記錄次要版本的 USN_RECORD_COMMON_HEADER 結構。

FileReferenceNumber

此記錄所記下之檔案或目錄的128位序號。

這個值是任意指派的值,可將日誌記錄與檔案產生關聯。

ParentFileReferenceNumber

與這個記錄相關聯的檔案或目錄所在目錄的128位序號。

這個值是任意指派的值,可將日誌記錄與父目錄產生關聯。

Usn

此記錄的 USN。

Reason

旗標,可識別自檔案或目錄開啟后累積在此檔案或目錄日誌記錄中變更的原因。

當檔案或目錄關閉時,會產生最後一筆 USN 記錄,並設定 USN_REASON_CLOSE 旗標。 例如,下一個變更 (,在下一個開啟作業或刪除之後,) 以一組新的原因旗標啟動新的記錄。

重新命名或移動作業會產生兩筆 USN 記錄,一筆記錄專案的舊父目錄,另一筆記錄新的父系。

下表識別可能的旗標。

注意 未使用的位會保留。
 
意義
USN_REASON_BASIC_INFO_CHANGE
0x00008000
例如,用戶已變更一或多個檔案或目錄屬性 (,例如只讀、隱藏、系統、封存或疏鬆屬性) 或一或多個時間戳。
USN_REASON_CLOSE
0x80000000
檔案或目錄已關閉。
USN_REASON_COMPRESSION_CHANGE
0x00020000
檔案或目錄的壓縮狀態會從 或 變更為壓縮。
USN_REASON_DATA_EXTEND
0x00000002
檔案或目錄會擴充 (新增至) 。
USN_REASON_DATA_OVERWRITE
0x00000001
會覆寫檔案或目錄中的數據。
USN_REASON_DATA_TRUNCATION
0x00000004
檔案或目錄已截斷。
USN_REASON_EA_CHANGE
0x00000400
用戶變更檔案或目錄的擴充屬性。

Windows 應用程式無法存取這些NTFS檔案系統屬性。

USN_REASON_ENCRYPTION_CHANGE
0x00040000
檔案或目錄已加密或解密。
USN_REASON_FILE_CREATE
0x00000100
檔案或目錄第一次建立。
USN_REASON_FILE_DELETE
0x00000200
檔案或目錄已刪除。
USN_REASON_HARD_LINK_CHANGE
0x00010000
NTFS 檔系統硬式連結會新增至檔案或目錄,或從檔案或目錄移除。

NTFS 檔案系統硬式連結,類似於 POSIX 硬式連結,是看到相同檔案或目錄的數個目錄專案之一。

USN_REASON_INDEXABLE_CHANGE
0x00004000
用戶變更 FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 屬性。

也就是說,使用者會將檔案或目錄從可編製內容的索引變更為無法編製內容的索引,反之亦然。 內容索引編製允許藉由建置所選內容的資料庫來快速搜尋數據。

USN_REASON_INTEGRITY_CHANGE
0x00800000
用戶已變更指定數據流 FILE_ATTRIBUTE_INTEGRITY_STREAM 屬性的狀態。

在 ReFS 檔系統上,完整性數據流會維護該數據流所有數據總和檢查碼,以便在讀取或寫入作業期間驗證檔案的內容。

USN_REASON_NAMED_DATA_EXTEND
0x00000020
檔案的一或多個具名數據流會擴充 (新增至) 。
USN_REASON_NAMED_DATA_OVERWRITE
0x00000010
檔案的一或多個具名數據流中的數據會遭到覆寫。
USN_REASON_NAMED_DATA_TRUNCATION
0x00000040
檔案的一或多個具名數據流會被截斷。
USN_REASON_OBJECT_ID_CHANGE
0x00080000
檔案或目錄的物件標識碼已變更。
USN_REASON_RENAME_NEW_NAME
0x00002000
檔案或目錄已重新命名,而 USN_RECORD_V4 結構中的檔名是新的名稱。
USN_REASON_RENAME_OLD_NAME
0x00001000
檔案或目錄已重新命名,而 USN_RECORD_V4 結構中的檔名是先前的名稱。
USN_REASON_REPARSE_POINT_CHANGE
0x00100000
檔案或目錄中包含的重新分析點已變更,或重新分析點會新增至檔案或目錄中或刪除。
USN_REASON_SECURITY_CHANGE
0x00000800
變更檔案或目錄的訪問許可權。
USN_REASON_STREAM_CHANGE
0x00200000
具名數據流會新增至檔案或從檔案中移除,或重新命名數據流。
USN_REASON_TRANSACTED_CHANGE
0x00400000
指定的數據流會透過認可的 TxF 交易進行修改。

SourceInfo

DeviceIoControl 作業FSCTL_MARK_HANDLE所設定之變更來源的其他資訊。

當線程寫入新的 USN 記錄時,只有在線程也設定這些旗標時,才會繼續存在先前記錄中的來源資訊旗標。 因此,來源信息結構可讓應用程式篩選掉只由已知來源設定的USN記錄,例如防毒篩選器。

您可以設定下列其中一個值。

意義
USN_SOURCE_AUXILIARY_DATA
0x00000002
作業會將私人數據流新增至檔案或目錄。

其中一個範例是病毒偵測器新增總和檢查碼資訊。 當病毒偵測器修改專案時,系統會產生USN記錄。 USN_SOURCE_AUXILIARY_DATA 表示修改未變更應用程式數據。

USN_SOURCE_DATA_MANAGEMENT
0x00000001
此作業提供作業系統對檔案或目錄所做的變更相關信息。

一般用途是當遠端記憶體系統將數據從外部移至本機記憶體時。 遠端記憶體是階層式記憶體管理軟體。 這類行動通常至少會將 USN_REASON_DATA_OVERWRITE 旗標新增至 USN 記錄。 不過,數據並未從使用者的觀點變更。 藉由在SourceInfo成員中記下USN_SOURCE_DATA_MANAGEMENT,您可以判斷雖然寫入作業是在專案上執行,但數據尚未變更。

USN_SOURCE_REPLICATION_MANAGEMENT
0x00000004
作業正在修改檔案,以符合存在於複本集另一個成員中相同檔案的內容。
USN_SOURCE_CLIENT_REPLICATION_MANAGEMENT
0x00000008
作業正在修改客戶端系統上的檔案,以符合存在於雲端中相同檔案的內容。

RemainingExtents

目前 USN_RECORD_V4 記錄之後所保留的範圍數目。 可能需要多個 4.0 版記錄,才能描述指定檔案的所有修改範圍。 當 RemainingExtents 成員是 0 時,目前的USN_RECORD_V4記錄是檔案的最後一筆USN_RECORD_V4記錄。 指定檔案的最後 一個USN_RECORD_V4 專案一律會接著至少設定 USN_REASON_CLOSE標的USN_RECORD_V3 記錄。

NumberOfExtents

目前 USN_RECORD_V4 專案中的範圍數目。

ExtentSize

Extents 成員中每個USN_RECORD_EXTENT結構的大小,以位元組為單位。

Extents[1]

USN_RECORD_EXTENT 結構的陣列 ,表示 USN_RECORD_V4 專案中的範圍。

備註

只有在開啟範圍追蹤且檔案大小等於或大於 RangeTrackFileSizeThreshold 成員的值時,才會輸出USN_RECORD_V4記錄。 使用者一律會收到一或多個 USN_RECORD_V4 記錄,後面接著一筆 USN_RECORD_V3 記錄。

為了在變更日誌用戶端中提供路徑轉寄相容性,Microsoft 會在 USN_RECORD_V4 結構中提供變更日誌軟體的主要和次要版本號碼。 您的程式代碼應該檢查這些值、檢查其本身與變更日誌軟體的相容性,並視需要適當地處理任何不相容。

次要版本號碼的變更表示現有的 USN_RECORD_V4 結構成員仍然有效,但新成員可能已新增到第二個成員與最後一個,這是可變長度字串。

若要正常處理這類變更,您的程式代碼不應該執行任何依賴最後一個成員位置的編譯時間指標算術。 例如,次要版本號碼中的變更會使 sizeof(USN_RECORD) 呼叫不可靠。 而是依賴使用 RecordLength 成員的 運行時間計算。

變更日誌軟體的主要版本號碼增加表示 USN_RECORD_V4 結構可能已經進行重大變更,而且目前的定義可能不可靠。 如果您的程式代碼偵測到變更日誌軟體的主要版本號碼變更,程式代碼就不應該與變更日誌搭配使用。

如需詳細資訊,請參閱建立、修改和刪除變更 日誌

規格需求

需求
最低支援的用戶端 Windows 8.1 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2012 R2 [僅限傳統型應用程式]
標頭 winioctl.h (包含 Windows.h)

另請參閱

FSCTL_MARK_HANDLE

FSCTL_READ_USN_JOURNAL

FSCTL_USN_TRACK_MODIFIED_RANGES

GetFileAttributes

GetVolumeInformation

READ_USN_JOURNAL_DATA

USN_RECORD_COMMON_HEADER

USN_RECORD_EXTENT

USN_RECORD_V2

USN_RECORD_V3

磁碟區管理結構