8
votes

Comment WriperFile à une physicyDrive (Windows 7) sans obtenir Error_Access_dentié?

J'essaie d'écrire un modèle de test à chaque secteur d'un lecteur USB formaté. Il y a un lecteur logique (par ex. H :). Ce volume est formaté de graisse et contient des données à écraser. De plus, je veux écraser tout le lecteur physique. Le programme fonctionne avec des droits d'utilisateur élevés.

D'abord, j'ai fait ce qui suit: p>

// 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 );


2 commentaires

Et vous courez en tant qu'administrateur?


@David: Oui, je suis en cours d'exécution.


3 Réponses :


3
votes

Je n'ai pas eu de problèmes avec différents Wrystfile () tailles, mais j'ai fait résoudre le

wrôlerfile (): l'accès est refusé à '\. \ phydrivex

périphériques (généralement HDD USB / SSD) dans Windows 7 en cours d'exécution d'administrateur (droits élevés) comme suit:

Gestion de l'ordinateur -> Gestion du disque:

  • volume (H: dans votre cas) -> Cliquez avec le bouton droit de la souris -> Supprimer le volume
  • disque (disque 2 dans votre cas) -> Cliquez avec le bouton droit de la souris -> Off-Line
  • Disque (Disque 2 dans votre cas) -> Cliquez avec le bouton droit de la souris -> En ligne

    Après cela, je suis capable d'écrire à '\. \ PhysicalDriveX' sans problème.

    Je pense que les serrures Win7 (contrairement aux sorties de Windows précédentes) le périphérique physique tant qu'il existe un système de fichiers sur l'appareil pour éviter les problèmes de cohérence.


0 commentaires

0
votes

Une autre méthode consiste à utiliser propre code> sur Supprimer toutes les partitions (et toutes les données) forte> sur le disque:

C:\> diskpart
Diskpart> list disk

Diskpart> select disk N (where N is your disk number)

Diskpart> clean

Diskpart> exit


1 commentaires

Vous devriez préférer votre message avec un avertissement de ce que cela fait. Un utilisateur inexpérimenté faisant cela pourrait facilement essuyer les données d'un lecteur sans connaître les ramifications complètes de cette commande.