NOEMBLEM/エンブレムが設定されていません。

メールの詳細(メール表示)

件名:

Re: VMware 検出コード

差出人: KATO Kenjiさん
送信日時 2002/05/27 12:07
ML.NO [vmware-j:1243]
本文:

Makoto NARA wrote
on Mon, 27 May 2002 04:27:40 +0900:
>Mc.N と申します。
>VMware 検出コード、とても興味深かったです。
>
>>> vmaware 方は、Win9x(VC++ 6.0)と Linux(gcc 2.95.3)で
>>> VMware 3.1.1/2.0.4、物理マシン取り混ぜて試してみましたが
>>> ちゃんと判定できました。ただし WinNT 系では駄目でした。
>>> I/O コールを使用しているためで、アプリケーション例外で
>>> 落ちます。多分カーネルモードドライバを書かないといけない
>>> のだと思います。
>
>WinNT 系でのアプリケーション例外は try-except で逃げれました。
>_asm{} を __try{...}__except(EXCEPTION_EXECUTE_HANDLER){} で囲うことで
>Privileged Instruction で中断することを防いでいます。

情報感謝!です。そんな単純なことで良かったとは...

>1. VMware の返してくる version 番号について
> 私の環境(Host:W2K(VMware 3.1), Guest:W2K)では 6 を返してきました。
> この 6 が何を意味するのかが不明です。多分、VMware 自身の Release
> 番号と思われますが、確証出来る環境を持っていません。
> ご存知無いですか?

私のところでも 6 です。VMware 2.0 でも 6 でした。
ついでに、ecx には 4 が返されるんですよね。
いったい何なんでしょうね?

>2. BDOOR_CMD_GETVERSION 以外のコマンドについて
> BDOOR_CMD_GETVERSION 以外にも面白いコードがあるのではないかと
> 睨んでいます。そこでネタ元(news.vmware.com)を漁ろうと思った
> のですが、なかなか見当たりません。
> 元ネタのヒント、若しくはキーワードとかありませんか?

From: "Edouard Bugnion" <bugnion@…>
Newsgroups: vmware.guest.misc,vmware.guest.windows95
Subject: Re: Dectecting VMWare
Date: Mon, 22 Mar 1999 21:54:58 -0800
Message-ID: <7d7b7h$k87$3@…>

元ネタの記事はこれなのですが、
ほかのコマンドについての記事は見当たりませんでした。

で、一応自分でいろいろ試して、以下のコマンドを見つけました。

0x04 マウスカーソル位置の取得。
eax の 上位 16 ビットに x、下位 16 ビットに y が返る。
VM にフォーカスがない場合は -100, -100

0x05 マウスカーソル位置の設定
ebx の 上位に x、下位に y を設定する。
例えば、DOS の VM で 0, 0 に設定すると、フォーカスを
リリースした時にカーソルがゲスト画面の左上に現れる。

0x0b デバイス情報取得(名称、接続/未接続)
各デバイスごとに、40 バイトの情報がある。
オフセット 0 からが名称 (floppy0, ide1:0, sound 等)、
オフセット 36 が接続(1)/未接続(0)。これ以外は不明。
ebx の上位に 0 から始まるデバイス番号、下位にオフセット設定
して実行すると、同じく ebx に指定したオフセットから始まる
4 バイトが返される。つまり、一つのデバイスの情報を全て
取得するにはコマンドを 10 回発行しなければならない。
成功した場合 eax に 1 が返される。デバイスが存在しない、
オフセットが大きすぎるなどの場合、1 以外が返される。

0x0c デバイス接続/切断
ebx の下位にデバイス番号(0x0b で取得したもの)を設定。
接続する時は最上位ビットを 1 にする。
0x80000001 で 1 番を接続、0x00000003 で 3 番を切断、など。

0x0d VMware の状態取得。
eax に grab、copy & paste、時刻同期、フルスクリーンなどの状態
がビットマスクで 返される。どのビットがどの設定なのかは未調査。

0x0e VMware の状態設定
ebx にビットマスクで状態を設定する。各ビットの意味は未調査。

0x12 A bootable CD-ROM disk, floppy diskette, or hard disk was
not detected ダイアログが表示される(笑)。

0x17 ホストの時刻取得
eax に time_t と同じ 32 ビットの GMT 時刻が返される。
ebx, ecx, edx にも何か意味ありげな値が返されるのですが...

ほかにも意味ありげな値が返って来たり、vmware.log に何かメッセージが
出るコマンドが結構あるので、色々試してみてくださいな ^^)

ちなみに、今これを元に DOS コマンドライン用の VMware Tools もどき
を作っています。今のところデバイスの一覧と接続/切断ぐらいしか
出来ませんが、自分的にはけっこう便利なんじゃないかと思ってます。
(フロッピや CD イメージを入れ替えた時にいったん切断して再接続、
がワンステップで出来たりするのは本気でかなり便利です。)
ある程度形になったらソース込みで公開するつもりです。

--
KATO Kenji (kenjik@…)

このエントリーをはてなブックマークに追加
添付:

このメールは下記のメールに対する返信です:

このメールには下記のメールが返信されています: