Wie WriteFile, um eine PhysicalDrive (Windows 7) ohne ERROR_ACCESS_DENIED?

Ich versuche zu schreiben, ein Testmuster zu jeder Sektor von einem formatierten USB-Stick. Es ist ein logisches Laufwerk (z.B. h:). Dieses Volumen ist FAT-formatiert ist und Daten enthält, die überschrieben werden. Außerdem möchte ich überschreiben des gesamten Datenträgers. Das Programm läuft mit erhöhten Benutzerrechten.

Ersten habe ich Folgendes:

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

Den Aufruf WriteFile schlägt mit ERROR_ACCESS_DENIED.

Wenn ich Schreibe, ein Sektor, es funktioniert.

Wenn ich überschreiben der erste Sektor, und stecken Sie das Gerät aus und wieder ein, will Windows ihn formatieren. In dieser situation, meinen code mit 2048 Sektoren auf einmal funktioniert ohne ERROR_ACCESS_DENIED.

Ich auch ausgehängt, die Lautstärke wie beschrieben in CodeProject: WriteFile auf Physikalische Laufwerke, die mit Windows 7 aber das hat überhaupt nichts verändern. Offensichtlich wird das volume ausgehängt werden, weil es nicht mehr sichtbar in Windows Explorer.

Will ich mehr schreiben, als einen einzigen Sektor aufgrund von perfomance-Gründen. Ich habe auch Angst davor, dass andere Probleme in dem Bereich auftreten, weil ich nicht vollständig verstehen, ths problem.

Irgendwelche Vorschläge?

  • Und Sie sind als administrator ausgeführt?
  • Ja, ich bin mit erhoben.
InformationsquelleAutor ur. | 2011-07-07
Schreibe einen Kommentar