Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Cekap Mengesan Perubahan Fail pada Jilid NTFS dengan FSCTL_ENUM_USN_DATA?

Bagaimana untuk Cekap Mengesan Perubahan Fail pada Jilid NTFS dengan FSCTL_ENUM_USN_DATA?

DDD
Lepaskan: 2024-11-04 10:07:30
asal
255 orang telah melayarinya

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

Mengesan Perubahan Fail pada Jilid NTFS

S: Bagaimanakah saya boleh mengesan dengan cekap hanya fail yang dipadam, ditukar dan dibuat pada volum NTFS ?

J: Anda boleh menggunakan fungsi FSCTL_ENUM_USN_DATA untuk menghitung semua fail pada volum. Fungsi ini menyediakan senarai rekod fail yang termasuk bendera fail dan USN, membolehkan anda mengenal pasti perubahan dengan cepat.

Butiran Pelaksanaan:

Sampel kod yang disediakan menggunakan FSCTL_ENUM_USN_DATA untuk mendapatkan semula rekod fail, menapis perubahan dan memaparkan maklumat yang berkaitan.

<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>
Salin selepas log masuk

Nota Tambahan:

  • FSCTL_ENUM_USN_DATA ialah kaedah pantas yang hanya mengembalikan maklumat tentang fail sedia ada.
  • Untuk mendapatkan laluan fail yang lengkap, anda boleh memadankan ID induk dengan ID fail direktori.
  • Pertimbangkan data caching dikembalikan oleh FSCTL_ENUM_USN_DATA untuk prestasi yang dipertingkatkan.
  • FSCTL_ENUM_USN_DATA hendaklah dipanggil dengan kerap untuk menangkap perubahan yang dibuat sejak imbasan terakhir.

Atas ialah kandungan terperinci Bagaimana untuk Cekap Mengesan Perubahan Fail pada Jilid NTFS dengan FSCTL_ENUM_USN_DATA?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan