有没有一种干净的方法可以获得 Windows 下物理分区的独占访问权限?

有没有一种干净的方法可以获得 Windows 下物理分区的独占访问权限?

我尝试在 Windows 7 下使用 VMWare Player 从安装在物理分区上的操作系统运行虚拟机。但是,当我启动虚拟机时,VMWare Player 提示无法访问物理驱动器进行写入。

这似乎是 VMWare 社区普遍承认的一个问题,因为 Windows Vista推出了引人注目的新安全功能这使得在没有首先获得对原始驱动器的独占访问权限的情况下无法对其进行写入。

我已经在 Google 上搜索了这个问题,并找到了一些解决方法。然而,干净的 那些似乎只对整个物理磁盘起作用,而不对分区起作用。

所以我会剩下肮脏的解决方案。简而言之,它会干预 MBR 以擦除要使用的分区的任何痕迹,让 Windows 忘记它们,然后恢复 MBR,以便我们可以启动 VM。

我不确定是否要这样做。有没有办法让 VMWare 获得对分区的独占访问权限,而无需我将其删除?我想我正在寻找的是一种将分区而不是整个物理驱动器脱机的方法。


更多信息与赏金有关。

我有一个双启动设置:Mac OS 是我的主要操作系统,我还安装了 Windows。如果我不想重新启动,我可以在虚拟机中运行 Windows,但我希望在 Windows 下也能在虚拟机中运行 Mac OS。

我的目标是在 Windows 下从 VMWare 运行我的主要 Mac OS 分区,就像我从 VMWare Fusion 运行 Windows 一样。(由于这是我的主要操作系统,我不打算修补内核或其他任何内容以使其在虚拟机中运行。)我从 VMWare Fusion 创建了虚拟机(因为它具有“Mac OS X Server”VM 类型),然后将其移动到 Windows 并从 VMWare Player 对其进行了修改。似乎几乎可以正常工作,因为操作系统进入加载屏幕,然后 VM 因无法访问而死机\\.\PhysicalDrive0

Virtual Box 的失败更为严重,因为它以详细模式启动 Mac OS 并很快崩溃(但似乎能够访问分区),所以我认为让 VMWare 访问我的分区比让 Virtual Box 运行它更容易。

从法律角度来说,我会在一台贴有 Apple 标签的机器上运行一份 Mac OS X,所以没问题。

答案1

我只遇到过一种可能的解决方案,使用免费的虚拟磁盘驱动程序磁盘结合 devio(远程驱动器访问和获取)。由于 imdisk 是内核驱动程序,它可能能够写入分区。不幸的是,由于 devio 在用户模式下工作,我不太确定这种方法是否适合您。

devio 可以获取物理分区并将其发布到网络上。例如:

devio -r 9000 \\.\PhysicalDrive0 2

确实从第一个磁盘在 TCP 端口 9000 上发布第二个分区,并将等待此端口上的连接。测试时最好禁用防火墙,并以管理员身份运行 devio。

要将此已发布的分区定义为新的独立硬盘,请使用:

imdisk -a -t proxy -o ip -f 127.0.0.1 -m R:

使用 localhost 将创建一个名为 R 的新硬盘,它不是任何分区。现在您可以尝试是否可以在 VMware 虚拟机中使用假装的真实硬盘 R。

这种方法在Devio:远程驱动器访问和获取

如果这不起作用,您必须:

  1. 接受修改 MBR 的危险解决方案。
  2. 放弃在 Win7 中使用 MacOS 作为 VM,通过 Windows 应用程序使用 Mac 分区中的文件(存在行尾字符问题)。
  3. 使用虚拟文件系统产品,例如ELDOS回调文件系统,尽管我怀疑这个问题对你来说是否值得花几千美元。
  4. 放弃Windows 7并降级到XP。
  5. 修改imdisk 的来源这样,作为内核驱动程序,它将直接在物理分区上创建一个虚拟磁盘,而不需要 devio。

答案2

这取决于你有多渴望实现这个目标,但我想说这是可能的,“仅”需要两个“简单”(阅读:残酷)的步骤:

  1. 编写一个驱动程序来绕过 Windows 设置的限制,使用(半?)文档标志SL_FORCE_DIRECT_WRITE

  2. 使用类似以下库从 VMWare挂接CreateFileand/or调用WriteFile易钩(我告诉过你这很容易!)使用你的驱动程序手动与文件通信,也许使用与驱动程序通信DeviceIoControl

如果你知道在哪里寻找绕过限制的信息,这实际上听起来并不是那么糟糕...我自己已经连接了像 Nero 这样的应用程序来检查IOCTL_SCSI_PASS_THROUGH调用,这样我就可以制作自己的 CD 刻录机库,这不会太难;编写驱动程序将是更难的部分,但可以管理。


编辑:

我猜你已经知道了,但你需要修改的结构叫做FLT_IO_PARAMETER_BLOCK。不确定IRP_MJ_READ它会有多容易,但应该不会太难。

相关内容