首頁 >後端開發 >C++ >如何使用 FSCTL_ENUM_USN_DATA 高效檢測 NTFS 磁碟區上的檔案變更?

如何使用 FSCTL_ENUM_USN_DATA 高效檢測 NTFS 磁碟區上的檔案變更?

DDD
DDD原創
2024-11-04 10:07:30258瀏覽

How to Efficiently Detect File Changes on NTFS Volumes with FSCTL_ENUM_USN_DATA?

偵測NTFS 磁碟區上的檔案變更

問:如何有效地僅偵測NTFS 磁碟區上已移除、變更和建立的檔案?

答:您可以使用FSCTL_ENUM_USN_DATA 函數列舉磁碟區上的所有檔案。此函數提供包含文件標誌和 USN 的文件記錄列表,使您可以快速識別變更。

實作細節:

提供的程式碼範例使用 FSCTL_ENUM_USN_DATA 擷取檔案記錄,過濾變更並顯示相關資訊。

<code class="c++">#include <Windows.h>
#include <stdio.h>

// ...

void check_record(USN_RECORD *record)
{
    // Check for specific file name or criteria
    // ...

    show_record(record);
}

int main(int argc, char ** argv)
{
    // Initialize variables
    // ...

    for (;;)
    {
        // Call FSCTL_ENUM_USN_DATA to get file records
        // ...

        record = (USN_RECORD *)((USN *)buffer + 1);
        recordend = (USN_RECORD *)(((BYTE *)buffer) + bytecount);

        while (record < recordend)
        {
            filecount++;

            check_record(record);

            record = (USN_RECORD *)(((BYTE *)record) + record->RecordLength);
        }

        mft_enum_data.StartFileReferenceNumber = nextid;
    }

    // ...
}</code>

附加說明:

  • FSCTL_ENUM_USN_DATA 是一種快速方法,僅傳回有關現有檔案的資訊。
  • 要取得完整的檔案路徑,可以將父 ID 與目錄的檔案 ID 進行比對。
  • 考慮快取由FSCTL_ENUM_USN_DATA 以提高效能。
  • 應定期呼叫 FSCTL_ENUM_USN_DATA 以擷取自上次掃描以來所做的變更。

以上是如何使用 FSCTL_ENUM_USN_DATA 高效檢測 NTFS 磁碟區上的檔案變更?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn