代码转自“我在沉睡”的博客,经测试在VMWare7.0.0中能够正常检测。

function IsInsideVMWare: Boolean;
var
  rc: Boolean;
begin
  rc := False;

  try
    asm
      push   edx
      push   ecx
      push   ebx

      mov    eax, 'VMXh'
      mov    ebx, 0       // any value but not the MAGIC VALUE
      mov    ecx, 10      // get VMWare version
      mov    edx, 'VX'    // port number

      in     eax, dx      // read port
                          // on return EAX returns the VERSION
      cmp    ebx, 'VMXh'  // is it a reply from VMWare?
      setz   [rc]         // set return value

      pop    ebx
      pop    ecx
      pop    edx
    end;
  except
    on EPrivilege do rc := False;
  end;

  Result := rc;
end;

除此之外,还有些链接能够实现类似功能,甚至能够检测Virtual PC:

  1. Detect if your program is running inside a Virtual Machine
    http://www.codeproject.com/KB/system/VmDetect.aspx
  2. How to detect Virtual PC or VMWare from your program
    http://www.codegurus.be/codegurus/Programming/virtualpc%26vmware_en.htm
VirtualPC

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-09-26
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-06
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-23
相关资源
相似解决方案