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?

Et que vous exécutez en tant qu'administrateur?
Oui, je suis en cours d'exécution élevé.

OriginalL'auteur ur. | 2011-07-07