64-Bit-Windows-VMware-Erkennung

Ich versuche, eine Anwendung zu entwickeln, die erkennt, ob ein Programm in einer virtuellen Maschine ausgeführt wird.

Für 32-Bit-Windows gibt es bereits Methoden, die unter dem folgenden Link erläutert werden:http://www.codeproject.com/Articles/9823/Detect-if-your-program-is-running-inside-a-Virtual

Ich versuche, den Code für die Erkennung von Virtual PC und VMware in einem 64-Bit-Windows-Betriebssystem anzupassen. Für VMware kann der Code in einem Windows XP 64-Bit-Betriebssystem erfolgreich erkannt werden. Das Programm stürzt jedoch ab, wenn ich es auf einem nativen System (Windows 7 64-Bit-Betriebssystem) ausführe.

Ich füge den Code in eine .asm-Datei ein und definiere den benutzerdefinierten Erstellungsschritt mit der Datei ml64.exe. Der ASM-Code für 64-Bit-Windows lautet:

<code>IsInsideVM proc

      push   rdx
      push   rcx
      push   rbx

      mov    rax, 'VMXh'
      mov    rbx, 0     ; any value but not the MAGIC VALUE
      mov    rcx, 10    ; get VMWare version
      mov    rdx, 'VX'  ; port number

      in     rax, dx    ; read port
                        ; on return EAX returns the VERSION
      cmp    rbx, 'VMXh'; is it a reply from VMWare?
      setz   al         ; set return value
      movzx rax,al

      pop    rbx
      pop    rcx
      pop    rdx

      ret
IsInsideVM endp
</code>

Ich nenne diesen Teil in einer cpp-Datei wie:

<code>__try
{
returnValue = IsInsideVM();
}
__except(1)
{
    returnValue = false;
}
</code>

Danke im Voraus.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage