6
votes

C # piste des fichiers copiés

J'essaie de garder une trace des fichiers copiés par les utilisateurs et d'autres applications. Le fichierSystemWatch n'appartient que des événements pour modifiés, créés, supprimés, disposés, des erreurs et renommés. Il ne tire pas un événement lorsqu'un fichier est accédé par la fonction de copie ou lorsque le nouveau fichier est en cours de copie.

existe-t-il une méthode de surveillance de l'événement / fonction de copie de Windows?


3 commentaires

Pouvez-vous regarder à la place de l'instance du presse-papiers? Juste une pensée. msdn.microsoft.com/en-us/library/ ...


Dans quelle mesure pouvez-vous tolérer l'échec de la piste d'une copie? Vous pouvez probablement suivre la plupart des copies (par exemple ceux faits par explorateur), mais certains glisseront.


Pourquoi essayez-vous de faire cela?


4 Réponses :


4
votes

Je ne sais pas de quelque manière que ce soit en utilisant c #.

Vous pouvez le faire si vous êtes prêt à écrire un filtre du système de fichiers Driver . [Territoire expert définitivement, car il est possible de corrompre des fichiers et / ou de faire venir votre système]

Un pilote de filtre système de fichiers intercepte les demandes ciblées dans un fichier système ou autre pilote de filtrage du système de fichiers. En interceptant le demande avant qu'il atteigne sa cible prévue, le pilote de filtre peut étendre ou remplacer la fonctionnalité fournie par la cible d'origine de la demande. Exemples de pilotes de filtres système de fichiers incluent Anti-Virus Filtres, agents de secours et produits de cryptage. Développer le fichier Systèmes et pilotes de filtres de système de fichiers, utilisez le fichier IFS (fichier installable Système) Kit, fourni avec le kit de pilotes Windows (WDK).


1 commentaires

Le pilote de filtre peut suivre des opérations de lecture et d'écriture séparées, mais elle ne peut pas établir le lien entre deux. Il n'est pas possible d'identifier la copie de manière définie.



1
votes

Vous faites la bonne chose avec fichiersystemwatcher . Windows n'a pas de mécanisme intégré pour signaler des copies de manière fiable.

Vous pouvez accrocher la routine de copie du système d'exploitation, mais cela ne vous garantira que de bons résultats: les applications sont libres de mettre en œuvre leur propre copie en ouvrant simplement les fichiers source et de destination et en copiant les octets.

Le renommage est différent car une renommée effectuée par le système d'exploitation ne peut pas être facilement imitée à travers d'autres moyens. Vous allez donc attraper tous les renommés avec le FileSystemwatcher . Notez que le déplacement entre les lecteurs ressemble plus à la copie: vous n'obtiendrez pas une notification renommée, mais un créé et supprimé à la place.

Donc, si vous avez vraiment besoin de remarquer un fichier à copier, mon approche suggérée est la suivante:

  • Hook Le Closefile appelle, en plus au FileSystemwatcher .
  • Chaque fois qu'un fichier est fermé, cela pourrait être parce que c'est la source ou la cible d'un déménagement de copie / transversale. Vérifiez sa taille.
  • Si vous trouvez deux fichiers fermés de la même taille dans un délai raisonnablement court, comparez le contenu. Jolie ressource-intensive, mais la seule façon fiable de le faire.

0 commentaires

0
votes

Vous pouvez utiliser Dossier d'audit et accès au dossier de Windows qui écrit une entrée de journal des événements et vous pouvez configurer des programmes pour démarrer lorsqu'un tel événement se produit


0 commentaires

0
votes

Je ne peux penser à aucun bon moyen.

Pour chaque fichier nouvellement créé, vous devez vérifier s'il y a un duplicaté précis (peut-être avec un nom différent) n'importe où sur le système de fichiers. Vous pouvez évidemment faire cette force brute, mais la solution serait très inélégante, lente et fragile!


0 commentaires