Heim >Backend-Entwicklung >C++ >Wie kann man Dateiänderungen auf NTFS-Volumes mit FSCTL_ENUM_USN_DATA effizient erkennen?

Wie kann man Dateiänderungen auf NTFS-Volumes mit FSCTL_ENUM_USN_DATA effizient erkennen?

DDD
DDDOriginal
2024-11-04 10:07:30257Durchsuche

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

Erkennen von Dateiänderungen auf NTFS-Volumes

F: Wie kann ich effizient nur die gelöschten, geänderten und erstellten Dateien auf einem NTFS-Volume erkennen? ?

A: Sie können die Funktion FSCTL_ENUM_USN_DATA verwenden, um alle Dateien auf einem Volume aufzulisten. Diese Funktion stellt eine Liste von Dateidatensätzen bereit, die die Flags und USNs der Datei enthält, sodass Sie Änderungen schnell identifizieren können.

Implementierungsdetails:

Das bereitgestellte Codebeispiel verwendet FSCTL_ENUM_USN_DATA zum Abrufen der Dateidatensätze, zum Filtern nach Änderungen und zum Anzeigen relevanter Informationen.

<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>

Zusätzliche Hinweise:

  • FSCTL_ENUM_USN_DATA ist eine schnelle Methode, die nur Informationen zu vorhandenen Dateien zurückgibt.
  • Um vollständige Dateipfade zu erhalten, können Sie übergeordnete IDs mit Datei-IDs von Verzeichnissen abgleichen.
  • Erwägen Sie die Zwischenspeicherung der von zurückgegebenen Daten FSCTL_ENUM_USN_DATA für verbesserte Leistung.
  • FSCTL_ENUM_USN_DATA sollte regelmäßig aufgerufen werden, um seit dem letzten Scan vorgenommene Änderungen zu erfassen.

Das obige ist der detaillierte Inhalt vonWie kann man Dateiänderungen auf NTFS-Volumes mit FSCTL_ENUM_USN_DATA effizient erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn