Windowsの物理ドライブとしてUSBフラッシュドライブに直接データの読み書きを実行しようとしています)。私はそれを行うためにPythonを使用しています。物理ディスク(フラッシュドライブ)にrawデータを書き込むことができません - Python
私は、以下の議論を踏襲しています
get writing access to raw devices using python with windows
私はkcstromはその質問に持っていた同じ問題に遭遇しました。私は得る
Traceback (most recent call last):
File "C:\script.py", line 49, in <module>
disk.write(data)
IOError: [Errno 9] Bad file descriptor
読んで、読んでいるデータが正しいです。私はこれまで知っている何
:ドライブの取り扱い
- がセクターで行われるべきなサイズは/シーク/読み書き。
- ディスクは 'rb +'モードで開く必要があります。
- \\。\ L:と\\。\ PhysicalDriveNの両方を使用すると、同じ結果が得られます。
- スクリプトは管理者権限で実行する必要があります。
- ドライブをアンマウントし、\\。\ PhysicalDriveNファイルにアクセスしようとしています - 管理者として実行していても "アクセス権が拒否されました"。
エラーを再現するには:(警告:このコードが破損PHYSICAL、ドライブCAN、あなたは何をしているかがわかっている場合のみ実行)
SOME_OFFSET = 123123
SOME_SIZE = 100
# replace L with the drive letter
disk = open('\\\\.\\L:','r+b')
# or use: (replace N with the drive number)
# disk = open('\\\\.\\PhysicalDriveN','r+b')
disk.seek(SOME_OFFSET*512)
data = disk.read(SOME_SIZE*512)
#modify data...
disk.seek(SOME_OFFSET*512)
disk.write(data)
これはパーミッションの問題であるならば、私は把握することはできませんまたはドライブを開けたときの問題。
基本的な 'WriteFile'は' ERROR_ACCESS_DENIED'で失敗します。マウントされたボリュームに直接書き込むことはできません。それを書き込む前に、ボリュームをロックしたりマウント解除したりするには、これ以上掘り下げなければなりません。 – eryksun
@eryksun私はそうするために必要な情報を教えてください。ありがとう! – MiaoHatola
['CreateFile'](https://msdn.microsoft。)で開かれたボリュームハンドルで[' DeviceIoControl'](https://msdn.microsoft.com/en-us/library/aa363216)と呼ぶことになります。 com/ja-us/library/aa363858)をご覧ください。ボリュームをロック、ディスマウント、ロック解除するための[ボリュームコントロールコード](https://msdn.microsoft.com/en-us/library/aa365729) Pythonでは、ctypesまたはPyWin32の['win32file'](http://docs.activestate.com/activepython/2.7/pywin32/win32file.html)モジュールを使用できます。 – eryksun