1

假设我正在运行带有两个主要进程的 Windows 7,我将称之为 V 和 P。

V 是运行另一个 Windows 7 实例的虚拟机,而 P 是我想要有关信息的进程,两者都在“顶级”操作系统上。

V 中的 Windows 7 正在运行的进程 C 能否从 V 中获取有关诸如 P 之类的进程的信息?换句话说,在虚拟机内部运行的进程能否获得有关操作系统正在运行的进程的任何信息,该操作系统也在维护虚拟机进程?我觉得它会依赖于虚拟机进程的能力,如果它没有被编程来专门检索这些信息,那么它是不可能的。

我已经阅读了另一个关于甚至检测进程是否正在由虚拟机运行的困难的主题。有些人认为它不可靠或不可能。我不确定是否有一种标准的方法可以找到它,我相信这篇文章大约是 4 或 5 年前的。

那么这可以通过流程 C 来完成,还是需要更多的标准例程来完成这项任务?

4

1 回答 1

1

我不相信在虚拟机管理器下运行的操作系统(例如(VMWare 等)直接访问与主机操作系统相关的信息是可能的,因为默认情况下,大多数虚拟机管理器都试图完全隔离主机和来宾系统.

话虽如此,大多数虚拟机管理器都有允许虚拟机共享数据并与主机系统通信的机制。通过使用这些机制,主机操作系统可以将有关自身的信息传达给客户。

选项 1:共享文件

通过主机和来宾之间的共享网络,可以让主机系统将信息写入共享位置的文件,并让来宾打开并使用CreateFileUNC 路径解析该文件,例如\\host\sharename\file.txt

选项 2:通过套接字或命名管道进行数据传输

主机和来宾之间的共享网络将允许您使用Windows 套接字命名管道API 来创建 TCP 或 UDP 套接字,或者可以交换数据的命名管道。

这种方法将涉及在主机应用程序上运行的服务器应用程序,它将您所追求的进程信息写入套接字或管道,运行客户端进程的来宾系统可以在其中读取它。

选项 3:远程 Windows 管理规范 (WMI) 查询

WMI 提供了一种获取信息并与 Windows 操作系统的许多方面(包括有关进程的信息)进行交互的标准方法。

这可能是最复杂的选项,因为默认情况下 WMI 不接受来自远程主机(即您的 VM)的查询,因此需要将主机配置为允许远程 WMI 查询。

一旦配置了 WMI,就可以通过 WMI 命令行客户端 ( wmic.exe) 轻松使用它,因此您可以使用如下查询调用它:

在这个例子中:

  • %HOST_NAME%是托管 Windows 7 VM 的系统的名称
  • %TARGET_PROCESS%
    是您想要了解的进程的进程名称

wmi \node:%HOST_NAME% process where name='%TargetProcess%' get executablepath

此特定查询获取 %TargetProcess% 的可执行路径,但根据Win32_Process WMI 类文档1的文档,还有更多可用的属性。

选项 4:共享剪贴板

一些虚拟机管理器允许来宾系统访问主机的剪贴板,因此可以在来宾和主机上运行的应用程序之间交换信息。

我很欣赏这可能是最不传统的选择,但您可以想象使用Windows 剪贴板 API将进程信息写入主机的剪贴板,然后将信息读入来宾系统上的进程。

1注意:尽管Win32_Process类文档以标题大小写 () 列出了属性,ExecutablePath但我发现它们仅在wmic以全小写 ( executablepath)编写时才能在查询中正常工作

于 2013-03-14T22:47:56.693 回答