ほとんどの仮想マシン マネージャーはデフォルトでホスト システムとゲスト システムを完全に分離しようとするため、仮想マシン マネージャー (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
にのみクエリで適切に機能することがわかりました。wmic
executablepath