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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte keine Probleme mit verschiedenen
WriteFile()
Größen, aber ich habe lösen dasGeräte (in der Regel USB-Festplatten (HDD/SSD) in Windows 7 ausführen als Administrator (elevated rights) wie folgt:
Computerverwaltung -> Datenträgerverwaltung:
Nach, dass ich in der Lage bin, zu schreiben,'\. \physicaldriveX " mit kein problem.
Denke ich, dass die Win7-sperren (im Gegensatz zu früheren Windows-Versionen), die vom physischen Gerät, wie lange es ein Dateisystem auf dem Gerät zu vermeiden, Konsistenz Probleme.
Können nicht direkt auf die Sektoren einer Festplatte, die im Besitz von einem gemounteten Dateisystem.
Sehen Änderungen auf das Dateisystem und der speicherstack um den direkten Zugriff auf die Festplatte und direkt auf ein volume zugreifen
In der Dokumentation für
FSCTL_DISMOUNT_VOLUME
beschreibt in der folgenden Sequenz für das überschreiben eines Dateisystems:Ihre Muster-schreiben-operation in Schritt 3 statt der Formatierung.
Andere Methode ist die Verwendung
clean
zu löschen Sie alle Partitionen (und ALLE DATEN) auf der Festplatte: