代码转自“我在沉睡”的博客,经测试在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:
- Detect if your program is running inside a Virtual Machine
http://www.codeproject.com/KB/system/VmDetect.aspx - How to detect Virtual PC or VMWare from your program
http://www.codegurus.be/codegurus/Programming/virtualpc%26vmware_en.htm