Maison > développement back-end > C++ > le corps du texte

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

DDD
Libérer: 2024-11-04 10:07:30
original
184 Les gens l'ont consulté

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!