J'essaye d'écrire un modèle de test à chaque secteur d'une commande USB formatée. Il y a un lecteur logique (par exemple h :). Ce volume est au format FAT et contient des données à remplacer. En outre, je veux écraser tout le disque physique. Le programme fonctionne avec des droits d'utilisateur élevés.Comment écrire un fichier sur un disque physique (Windows 7) sans ERROR_ACCESS_DENIED?
abord je les suivantes:
// 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, cela fonctionne.
Lorsque j'écrase le premier secteur et que je branche à nouveau le périphérique, Windows souhaite le formater. Dans cette situation mon code avec 2048 secteurs à la fois fonctionne sans ERROR_ACCESS_DENIED
.
J'ai également démonté le volume comme décrit dans CodeProject: WriteFile on Physical Drives with Windows 7 mais cela n'a rien changé. Évidemment, le volume est démonté car il n'est plus visible dans Windows Explorer.
Je souhaite écrire plus d'un secteur pour des raisons de performances. J'ai également peur que d'autres problèmes sur le terrain ne se produisent parce que je ne comprends pas bien le problème.
Des suggestions?
Et vous exécutez en tant qu'administrateur? –
@David: Oui, je cours en hauteur. –