Dies ist eine Art Fortsetzung von diese Frage . Ich möchte wissen, ob Sie auf Rohgeräte zugreifen können (d. h. \\.\PhysicalDriveN
) im Schreibmodus und wenn dies der Fall sein sollte, wie.
Unter Linux kann der Schreibzugriff einfach durch die Verwendung von z. B. open("/dev/sdd", "w+")
(vorausgesetzt, das Skript wird mit Root-Rechten ausgeführt). Ich nehme an, dass sich Mac OS ähnlich verhält (mit /dev/diskN
als Eingabedatei).
Wenn Sie denselben Befehl unter Windows (mit dem entsprechenden Pfad) ausprobieren, schlägt er mit der folgenden Fehlermeldung fehl:
IOError: [Errno 22] invalid mode ('w+') or filename: '\\\\.\\PhysicalDrive3'
Wenn Sie jedoch versuchen lesen aus dem PhysicalDrive, es funktioniert (auch die richtigen Daten werden gelesen). Die Shell läuft mit Administratorrechten unter Windows 7.
Gibt es eine andere Möglichkeit, diese Aufgabe mit Python zu erledigen und dabei das Skript so plattformunabhängig wie möglich zu halten?
Edita:
Ich habe mir die Methoden, die Python für die Dateibearbeitung bietet, etwas genauer angesehen und bin dabei auf Folgendes gestoßen os.open . Öffnen des PhysicalDrive mit os.open(drive_string, os.O_WRONLY|os.O_BINARY)
gibt keinen Fehler zurück. So weit, so gut. Jetzt habe ich entweder die Wahl, direkt in diesen Dateideskriptor zu schreiben, indem ich os.write , oder verwenden Sie os.fdopen um ein Datei-Objekt zu erhalten und es auf die übliche Weise zu beschreiben. Leider funktioniert keine dieser Möglichkeiten. Im ersten Fall ( os.write()
), bekomme ich dies:
>>> os.write(os.open("\\\\.\\PhysicalDrive3", os.O_WRONLY|os.O_BINARY), "test")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 22] Invalid argument
Im zweiten Fall, I puede ein Datei-Objekt mit Schreibrechten erstellen, aber das Schreiben selbst schlägt fehl (nun, nachdem die Ausführung mit .flush()
):
>>> g = os.fdopen(os.open("\\\\.\\PhysicalDrive3", os.O_WRONLY|os.O_BINARY), "wb")
>>> g.write("test")
>>> g.flush()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 22] Invalid argument