Detecção de VMware nas janelas de 64 bits

Eu estou tentando desenvolver um aplicativo que detecta se o programa está sendo executado dentro de uma máquina virtual.

Para o Windows de 32 bits, já existem métodos explicados no seguinte link:http://www.codeproject.com/Articles/9823/Detect-if-your-program-is-running-inside-a-Virtual

Eu estou tentando adaptar o código sobre a detecção de Virtual PC e VMware em um sistema operacional Windows de 64 bits. Para o VMware, o código pode ser detectado com êxito em um sistema operacional Windows XP de 64 bits. Mas o programa trava quando eu o executo em um sistema nativo (sistema operacional Windows 7 de 64 bits).

Eu coloquei o código em um arquivo .asm e definir etapa de compilação personalizada com o arquivo ml64.exe. O código ASM para o Windows de 64 bits é:

<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>

Eu chamo essa parte em um arquivo cpp como:

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

Desde já, obrigado.

questionAnswers(2)

yourAnswerToTheQuestion