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.