Comment WriteFile pour un lecteur physique appropriés (Windows 7) sans se ERROR_ACCESS_DENIED?
Je suis en train d'écrire un modèle de test pour chaque secteur de la forme d'un disque USB. Il y a une unité logique (par exemple h:). Ce volume est formaté en FAT et contient des données soient écrasées. Aussi, je tiens à écraser tout le disque physique. Le programme est exécuté avec des droits d'utilisateur élevés.
J'ai d'abord fait la suivante:
//from the drive letter "h:" I get the physical disk number using
//IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS => "\\.\PhysicalDrive2"
hDevice = ::CreateFile( "\\.\PhysicalDrive2", GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL );
//get the number of available sectors with IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
//=> ulNumberOfSectors
//now I try to write some sectors, e.g. 2 (I want to use a higher value):
WriteFile( hDevice, abBuffer, 2*512, &byteswritten, NULL );
L'appel à WriteFile
échoue avec ERROR_ACCESS_DENIED
.
Si j'écris un secteur, il fonctionne.
Quand je remplace le premier secteur et branchez l'appareil et encore, Windows veut le formater. Dans cette situation, mon code avec 2048 secteurs à la fois des œuvres sans ERROR_ACCESS_DENIED
.
J'ai aussi démonté le volume comme décrit dans CodeProject: WriteFile sur les Disques Physiques avec Windows 7 mais cela n'a rien changé. Évidemment, le volume est démonté, car il n'est plus visible dans l'Explorateur Windows.
Je veux écrire plus d'un secteur en raison des raisons de performance. J'ai aussi peur que d'autres problèmes dans le domaine peut se produire parce que je ne comprends pas tout ths problème.
Des suggestions?
Oui, je suis en cours d'exécution élevé.
OriginalL'auteur ur. | 2011-07-07
Vous devez vous connecter pour publier un commentaire.
Je n'ai pas de problèmes avec les différentes
WriteFile()
tailles, mais j'ai résolu lepériphériques (généralement USB HDD/SSD) dans Windows 7 en cours d'exécution en tant qu'Administrateur (avec élévation des droits) comme suit:
Gestion de l'ordinateur -> Gestion des Disques:
Après ça, je suis capable d'écrire '\.\physicaldriveX", sans problème.
Je pense que le Win7 verrous (à la différence des précédentes versions de Windows) la physique de l'appareil tant qu'il n'existe aucun système de fichiers sur l'appareil afin d'éviter des problèmes de cohérence.
OriginalL'auteur Radomir Tomis
Vous ne pouvez pas accéder directement aux secteurs d'un disque qui sont détenus par un système de fichiers monté.
Voir Modifications du système de fichiers et à la pile de stockage de restreindre l'accès direct au disque et directe du volume d'accès
La documentation pour
FSCTL_DISMOUNT_VOLUME
décrit la séquence suivante pour le remplacement d'un système de fichiers:Votre modèle d'écriture de l'opération serait à l'étape 3, au lieu de la mise en forme.
OriginalL'auteur Ben Voigt
Une autre méthode consiste à utiliser
clean
pour supprimer toutes les partitions sur le disque:OriginalL'auteur user2349550