Можно ли получить доступ на запись к необработанным устройствам с помощью Python с Windows?

Это своего рода продолжение этого вопроса . Я хочу знать, можете ли вы получить доступ к необработанным устройствам (например, \\. \ PhysicalDriveN ) в режиме записи, и если это так, то как.

Используя Linux, доступ для записи может быть просто получен с помощью используя, например, open ("/ dev / sdd", "w +") (при условии, что скрипт запущен с правами root). Я предполагаю, что Mac OS ведет себя аналогичным образом (с / dev / diskN в качестве входного файла).

При попытке использовать ту же команду под Windows (с соответствующим путем) происходит сбой со следующей ошибкой:

IOError: [Errno 22] invalid mode ('w+') or filename: '\\\\.\\PhysicalDrive3'

Однако при попытке прочитать с PhysicalDrive, он действительно работает (считываются даже правильные данные). Оболочка работает с правами администратора под Windows 7.

Есть ли другой способ выполнить эту задачу с помощью python, сохранив при этом скрипт как можно более независимым от платформы?

Изменить:

Я посмотрел немного дальше в том, какие методы Python предоставляет для обработки файлов, и наткнулся на os.open . Открытие PhysicalDrive с помощью os.open (drive_string, os.O_WRONLY | os.O_BINARY) не возвращает ошибок. Все идет нормально. Теперь у меня есть выбор: писать напрямую в этот файловый дескриптор с помощью os.write , или использовать os.fdopen , чтобы получить файл-объект и записать в него обычным способом. . К сожалению, ни одна из этих возможностей не работает. В первом случае ( os.write () ) я получаю следующее:

>>> os.write(os.open("\\\\.\\PhysicalDrive3", os.O_WRONLY|os.O_BINARY), "test")
Traceback (most recent call last):
  File "", line 1, in 
OSError: [Errno 22] Invalid argument

Во втором случае я могу создать объект файла с разрешениями на запись, но сама запись терпит неудачу (ну, после принудительного выполнения с помощью .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 "", line 1, in 
IOError: [Errno 22] Invalid argument

11
задан Community 23 May 2017 в 11:47
поделиться