我正在尝试在Windows(如果有关系,是10)上将USB闪存驱动器作为物理驱动器直接读取和写入数据。 我正在使用Python进行操作。
我遵循了以下讨论:
{{link1:使用Python在Windows下获取原始设备的写入访问权限}}
我遇到了与kcstrom在那个问题中所遇到的相同的问题。 我得到了一个标签。
我遵循了以下讨论:
{{link1:使用Python在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文件时 - 即使以管理员身份运行,“权限被拒绝”。
复制错误:(警告:此代码可能会损坏物理驱动器,请仅在了解自己在做什么的情况下运行)
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
。直接写入挂载的卷是不允许的。您需要深入了解此问题,锁定和卸载卷后才能将其写入或物理驱动器。 - Eryk SunCreateFile
打开的卷句柄调用DeviceIoControl
。这里是用于锁定、卸载和解锁卷的卷控制代码。在Python中,你可以使用ctypes或PyWin32的win32file
模块。 - Eryk Sun/dev/sd*
打开可以无缝运行。非常感谢您的帮助! - MiaoHatola