• ベストアンサー

仮想PCの見分けかた

ある実行ファイルに、自分が実行されている環境が仮想PCか、現実のPCかを完璧に区別させるためにはどうすればいいのでしょうか?というか、そのようなことができるのでしょうか?可能性の話でもいいので教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • lesskey
  • ベストアンサー率33% (66/200)
回答No.3

ゲストOSがWindows2000 or XPであると仮定して書き込みします。 仮想PCといっても色々あるので下記代表3点を元に・・・ 「VirualPC」、「VMWare Server」、「VirtualBox」 -- 1. VirtualPC 仮想NICのMACアドレスを調べることによりほぼ判明出来るかと。 仮想NICではアドレスのベンダコード部を見るとMicrosoftになっています。 現在のNICでMicrosoft製はほぼ見受けられない・・・ハズ。(^-^;) なのでコレで仮想PCか判別出来ます。 (参照:http://itpro.nikkeibp.co.jp/prembk/NBY/techsquare/20041025/151673/) 2. VMWare Server 「VMware Tools」がインストールされていれば仮想PC、なければ物理PCと判断。 3. VirtualBox 「VirtualBox Guest Additions」がインストールされていれば仮想PC、 なければ物理PCと判断。 -- 上記のように仮想PC上でのみインストールされているソフトなり デバイスなりをチェックしてみて判断するのが妥当かと・・・ Windows APIだけで仮想PCかを判断するのは難しいと思います。 あと補足ですが・・・ANo.2さんが言われている 「ゲームの中には仮想PC上では動かせない様になっている」とは 「DirectX(主に3D)」のエミュレートが実用段階ではなく、 ゲームの初期化でコケて動かないだけの状態だと思われます。 (VMWare Serverでは結構動きますが) ではでは、参考になれば。

0-o
質問者

お礼

アドバイスありがとうございます。とても参考になります。いろいろと聞いてみたいことが山ほどありますが、質問の意図が変わってしまうかもしれないので、ここでは質問しないことにします。

その他の回答 (2)

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.2

ゲームの中には仮想PC上では動かせない様になっている 物も有るので多分できるでしょう。 #ただし、この場合はゲームの解析をされてプロテクト #等を外されない様にデバッガ上で動作しない為の処理 #に引っかかる様です。

0-o
質問者

お礼

アドバイスありがとうございます。ANo.3さんが言っているようにエミュレータの再現率が低いだけかもしれませんし、そうでないかもしれません。私自身少し調べてみます。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.1

実行ファイルに、自分が実行されているとは、 1.実行ファイルの保存先が、仮想PC下にあるか否かと言うことでしょうか?。 2.それとも、実行ファイルのアクセス先が、仮想PCであるか否かと言うことでしょうか?。 1、2の場合は、実行ファイル自体は、解らないでしょう。 解るのは、実行ファイルのオペレーターだけでしょう。 追加です。 本当は、プログラミングで、仮想PCか、現実のPCかを判断させたいが それは、可能かを知りたいのでは、??。

0-o
質問者

補足

曖昧な質問をして申し訳ありません。率直に言えば、1で2でもありません。お察しの通りです。あるOSによって動かされている実行ファイルが、そのOSが仮想PC上にあるか、それとも物理PC上にあるかを判断させるにはどうすればいいかです(これも曖昧?)。 実行ファイルにシリアルナンバー式のプロテクトなどをつけたとしても、その仮想PCファイルごと不特定多数に共有されたら意味がありませんよね。だからこのような質問をさせてもらいました。

関連するQ&A