Windows de 64 bits de detección de VMware

Estoy tratando de desarrollar una aplicación que detecte si el programa se está ejecutando dentro de una máquina virtual.

Para Windows de 32 bits, ya hay métodos explicados en el siguiente enlace:http://www.codeproject.com/Articles/9823/Detect-if-your-program-is-running-inside-a-Virtual

Estoy tratando de adaptar el código relacionado con la detección de PC virtual y VMware en un sistema operativo Windows de 64 bits. Para VMware, el código puede detectar con éxito en un sistema operativo Windows XP de 64 bits. Pero el programa se bloquea cuando lo ejecuto en un sistema nativo (sistema operativo Windows 7 de 64 bits).

Pongo el código en un archivo .asm y defino el paso de compilación personalizado con el archivo ml64.exe. El código asm para Windows de 64 bits es:

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

Yo llamo esta parte en un archivo cpp como:

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

Gracias por adelantado.

Respuestas a la pregunta(2)

Su respuesta a la pregunta