当前位置: 首页 > 面试题库 >

是否可以在Windows中使用python获得对原始设备的写入权限?

解浩渺
2023-03-14
问题内容

这是对该问题的后续措施。我想知道您是否可以\\.\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。使用打开PhysicalDriveos.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 "<stdin>", line 1, in <module>
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 "<stdin>", line 1, in <module>
IOError: [Errno 22] Invalid argument

问题答案:

正如ryksun]和gf在评论中指出的(但我一开始并没有真正了解它),解决方案非常简单:您必须在rb+模式下打开设备,这会打开设备进行更新(如我所知)现在..),而不会尝试将其替换为新文件(该文件实际上是物理驱动器,因此不起作用)。

写入时,您必须一次始终写入整个扇区(即512字节的倍数),否则它将失败。

此外,该.seek()命令还只能按扇区跳转。如果您尝试在一个扇区内寻找位置(例如position
621),则文件对象将跳至您所请求的位置所在的扇区的开头(即,第二个扇区的开头byte 512)。



 类似资料:
  • 问题内容: 我需要在Spring Data Repository中使用原始SQL,这可能吗?我看到的所有内容始终都是基于实体的。 问题答案: @Query批注允许通过将nativeQuery标志设置为true来执行本地查询。 引用Spring Data JPA 参考文档。 另外,请参阅本节以了解如何使用命名的本机查询。

  • 问题内容: 假设我有一个数组数组 我想将其解析为对象。当我用 它似乎不起作用,我通过使用进行了工作 有一个更好的方法吗? 问题答案: 是的,请使用。 将允许你指定你真正想要的泛型类型,这有助于GSON找到类型来使用反序列化过程。 它使用这种宝石:。它是匿名类的事实使它成为的子类。相当于一个类 该方法的规范指出 如果超类是参数化类型,则返回的对象必须准确反映源代码中使用的实际类型参数。 如果指定 返

  • 问题内容: 我需要在Spring Data Repository中使用原始SQL,这可能吗?我看到的所有内容始终都是基于实体的。 问题答案: @Query批注允许通过将nativeQuery标志设置为true来执行本地查询。 引用Spring Data JPA 参考文档。

  • 问题内容: 介绍 我听说过一些有关用Java编写设备驱动程序的信息(听说是“用我的耳朵”,而不是通过互联网),我想知道…我一直认为设备驱动程序在操作系统级别上运行,因此必须以相同的语言编写作为操作系统(因此大多是CI假设) 问题 我通常会对此假设有误吗?(看起来是这样) OS中如何使用“外来”语言的驱动程序? 无论如何(从编程语言的角度)对设备驱动程序有什么要求? 谢谢阅读 问题答案: 有两种方法

  • 我试图在一秒钟内获得配对设备的蓝牙RSSI。我在这个网站上找到了一些针对这个主题的有趣方法。就我所能得出的结论而言,在我的情况下,使用Android SDK是不可能获得RSSI的。 但由于一些论文,我仍然有一些希望,即NDK仍然可以使用新bluedroid HAL堆栈的一些本机代码。 我正在使用三星Galaxy Nexus I9250作为我的大学项目。 那么,有人能告诉我,如果仍然有可能以这种或类

  • 问题内容: 我是一名中级新手,擅长于AJAX。在阅读JavaScript时,我感到奇怪的是,我一直在借鉴的大多数示例都使用PHP进行了这种操作。我知道你们中许多人可能会争辩说“我做错了”或“ JavaScript是一种客户端语言”等问题,但问题仍然存在。。。您可以仅使用JavaScript编写文件吗? 问题答案: 您可以使用 Google Gears之 类的东西来生成JS应用程序,这些应用程序可以