Maison >développement back-end >C++ >Comment détecter efficacement les modifications de fichiers sur les volumes NTFS avec FSCTL_ENUM_USN_DATA ?

Comment détecter efficacement les modifications de fichiers sur les volumes NTFS avec FSCTL_ENUM_USN_DATA ?

DDD
DDDoriginal
2024-11-04 10:07:30258parcourir

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

Détection des modifications de fichiers sur les volumes NTFS

Q : Comment puis-je détecter efficacement uniquement les fichiers supprimés, modifiés et créés sur un volume NTFS ?

A : Vous pouvez utiliser la fonction FSCTL_ENUM_USN_DATA pour énumérer tous les fichiers sur un volume. Cette fonction fournit une liste d'enregistrements de fichiers qui inclut les indicateurs et les USN du fichier, vous permettant d'identifier rapidement les modifications.

Détails de mise en œuvre :

L'exemple de code fourni utilise FSCTL_ENUM_USN_DATA pour récupérer les enregistrements du fichier, filtrer les modifications et afficher les informations pertinentes.

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

Remarques supplémentaires :

  • FSCTL_ENUM_USN_DATA est une méthode rapide qui renvoie uniquement des informations sur les fichiers existants.
  • Pour obtenir des chemins de fichiers complets, vous pouvez faire correspondre les ID parents avec les ID de fichier des répertoires.
  • Envisagez de mettre en cache les données renvoyées par FSCTL_ENUM_USN_DATA pour des performances améliorées.
  • FSCTL_ENUM_USN_DATA doit être appelé régulièrement pour capturer les modifications apportées depuis la dernière analyse.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn