64-bitowe wykrywanie Windows VMware

Próbuję opracować aplikację, która wykrywa, czy program działa wewnątrz maszyny wirtualnej.

W przypadku 32-bitowego systemu Windows istnieją już metody wyjaśnione w następującym linku:http://www.codeproject.com/Articles/9823/Detect-if-your-program-is-running-inside-a-Virtual

Próbuję zaadaptować kod dotyczący wykrywania Virtual PC i VMware w 64-bitowym systemie operacyjnym Windows. W przypadku VMware kod może wykryć pomyślnie w 64-bitowym systemie operacyjnym Windows XP. Ale program ulega awarii, gdy uruchamiam go w rodzimym systemie (Windows 7 64-bitowy system operacyjny).

Umieszczam kod w pliku .asm i definiuję niestandardowy krok kompilacji za pomocą pliku ml64.exe. Kod asm dla 64-bitowego systemu Windows to:

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

Nazywam tę część w pliku cpp, takim jak:

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

Z góry dziękuję.

questionAnswers(2)

yourAnswerToTheQuestion