1

V と P と呼ぶ 2 つの主要なプロセスで Windows 7 を実行しているとします。

V は Windows 7 の別のインスタンスを実行している仮想マシンで、P は情報が必要なプロセスであり、どちらも「トップレベル」のオペレーティング システム上にあります。

V 内の Windows 7 によって実行されているプロセス C は、V 内から P などのプロセスに関する情報を取得できますか? つまり、仮想マシン内で実行されているプロセスは、仮想マシン プロセスを維持しているオペレーティング システムによって実行されているプロセスに関する情報を取得できますか? 仮想マシン プロセスの能力に依存しているように感じます。具体的にそのような情報を取得するようにプログラムされていない場合、それは不可能です。

プロセスが仮想マシンによって実行されているかどうかを検出することさえ難しいという別のトピックを読みました。信頼できない、または可能ではないと感じる人もいます。これを見つけるための標準的な方法がまだあるかどうかはわかりませんが、投稿は約4〜5年前のものだと思います.

では、これはプロセス C で実行できるのでしょうか?それとも、このタスクを達成するためにさらに標準的なルーチンが必要になるのでしょうか?

4

1 に答える 1

1

ほとんどの仮想マシン マネージャーはデフォルトでホスト システムとゲスト システムを完全に分離しようとするため、仮想マシン マネージャー (VMWare など) の下で実行されているオペレーティング システムがホスト オペレーティング システムに関連する情報に直接アクセスできるとは思えません。 .

そうは言っても、ほとんどの仮想マシン マネージャーには、仮想マシンがデータを共有し、ホスト システムと通信できるようにするメカニズムがあります。これらのメカニズムを使用することで、ホスト オペレーティング システムは自身に関する情報をゲストに伝えることができます。

オプション 1: 共有ファイル

ホストとゲスト間の共有ネットワークを使用すると、ホスト システムに情報を共有場所のファイルに書き込み、ゲストを開いCreateFileて UNC パスを使用してこのファイルを解析させることができます。\\host\sharename\file.txt

オプション 2: ソケットまたは名前付きパイプを介したデータ転送

ホストとゲスト間の共有ネットワークにより、Windows ソケットまたは名前付きパイプAPI を使用して、TCP または UDP ソケット、またはデータを交換できる名前付きパイプを作成できます。

このアプローチには、ホスト アプリケーションで実行されているサーバー アプリケーションが含まれます。これは、クライアント プロセスを実行するゲスト システムが読み取ることができるソケットまたはパイプに、必要なプロセス情報を書き込みます。

オプション 3: リモート Windows Management Instrumentation (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 NB:Win32_Processクラスのドキュメントではプロパティをタイトル ケース ( ) でリストしていますが、すべて小文字 ( )で記述した場合ExecutablePathにのみクエリで適切に機能することがわかりました。wmicexecutablepath

于 2013-03-14T22:47:56.693 に答える