L’ouverture du fichier $ MFT provoque le refus de l’access même s’il est exécuté en tant qu’administrateur

J’essaie de supprimer un enregistrement de fichier de MFT, ce que je réussis si j’ouvre la partition brute et que j’atteins l’enregistrement de fichier requirejs en analysant le fichier MFT. Le problème avec cette approche est que je dois d’abord verrouiller le volume pour pouvoir écrire des zéros sur tout enregistrement de fichier MFT. Si un autre processus maintient le verrou de volume (ce qui est très probable), l’écriture sur le volume brut échoue à cause du système d’exploitation Windows. ressortingctions.

L’autre approche à laquelle je pense consiste à ouvrir «$ MFT» sous forme de fichier, puis à le lire et à l’écrire. De cette façon, je pense que je n’aurai pas à verrouiller le volume. Mais lorsque j’essaie d’ouvrir le fichier $ MFT via la fonction winfi de createfile, l’erreur “Accès refusé” est générée même si j’exécute mon programme en tant qu’administrateur?

Ma question est la suivante: comment puis-je ouvrir le fichier système $ MFT pour écrire et lire? Est-ce que Windows OS permet aux fichiers système de lire et d’écrire normalement? Si non, que puis-je faire d’autre?

Toute aide serait appréciée.

$ MFT n’est pas accessible à partir de programmes en mode utilisateur. (Dieu merci.) Il est maintenu par le pilote NTFS, et le pilote NTFS seul sait comment le maintenir à jour.

Pour votre implémentation planifiée, nous vous suggérons d’utiliser directement le système de fichiers ou d’implémenter un pilote de filtre de système de fichiers . Il existe un tutoriel sur l’écriture d’un pilote de filtre de système de fichiers et quelques indications sur la détection des suppressions . (Comme toujours, il y a des choses difficiles …)

Juste au cas où quelqu’un viendrait ici pour ouvrir $MFT dans l’unique but légitime, FSCTL_MOVE_FILE et FSCTL_GET_RETRIEVAL_POINTERS DeviceIoControl , vous devez spécifier FILE_READ_ATTRIBUTES dans le deuxième paramètre de CreateFile lors de l’ouverture de stream spéciaux tels que C:\$MFT::$DATA

L’ouverture de $MFT vous permet uniquement de vous référer au fichier spécial lors de l’exécution de requêtes DeviceIoControl . Elle ne l’ouvre pas pour la lecture et l’écriture comme un fichier normal.

Si vous voulez vraiment lire le contenu de la MFT, lorsque vous devez obtenir très rapidement la liste de tous les fichiers d’un volume, voir FSCTL_ENUM_USN_DATA , il renvoie des structures telles que USN_RECORD_V2 , qui sont essentiellement des enregistrements MFT.