我想检查我的应用程序是否在VMWare上运行。 有没有一种可靠的方法在C++中做到这一点?以编程方式检测VMWare
1
A
回答
4
我刚刚在codeproject上找到了这个程序集。
1
我想this link也许能帮助你。它在组装,而不是C++,但你总是在你的C++创建装配块...
////////////////////////////////////////////////////////////////////////////////
//
// Simple VMware check on i386
//
// Note: There are plenty ways to detect VMware. This short version bases
// on the fact that VMware intercepts IN instructions to port 0x5658 with
// an magic value of 0x564D5868 in EAX. However, this is *NOT* officially
// documented (used by VMware tools to communicate with the host via VM).
//
// Because this might change in future versions - you should look out for
// additional checks (e.g. hardware device IDs, BIOS informations, etc.).
// Newer VMware BIOS has valid SMBIOS informations (you might use my BIOS
// Helper unit to dump the ROM-BIOS (http://www.bendlins.de/nico/delphi).
//
function IsVMwarePresent(): LongBool; stdcall; // platform;
begin
Result := False;
{$IFDEF CPU386}
try
asm
mov eax, 564D5868h
mov ebx, 00000000h
mov ecx, 0000000Ah
mov edx, 00005658h
in eax, dx
cmp ebx, 564D5868h
jne @@exit
mov Result, True
@@exit:
end;
except
Result := False;
end;
{$ENDIF}
end;
与从互联网上的任何代码,请注意,只复制&粘贴它,期待它完美地工作。
+0
这似乎会导致Win2k8服务器崩溃,并可能导致Windows 7 32bit操作系统不幸 – 2009-12-11 23:37:57
+1
您可能需要将其包装在Win32“结构化”异常处理程序中。如果您获得了无效的指令异常或类似情况,那么您不在VMware中。 http://msdn.microsoft.com/en-us/library/s58ftw19%28VS.80%29.aspx – 2009-12-12 00:21:51
相关问题
- 1. 以编程方式检测类参数
- 2. 以编程方式检测SQL Server版
- 3. 检测到屏幕覆盖检测PopUp以编程方式处理?
- 4. Spawn JUnit 4以编程方式测试
- 5. 以编程方式检测iOS中的蜂窝网络类型
- 6. 以编程方式检测并设置外部屏幕?
- 7. 你如何以编程方式检测你的iPad的一代?
- 8. 如何以编程方式检测亮度
- 9. 如何以编程方式检测机器人
- 10. 以编程方式检测图像大小-iPhone
- 11. 如何以编程方式检测samba锁定的文件?
- 12. 如何检测onscroll事件是否以编程方式生成?
- 13. 如何在Android中以编程方式检测死锁?
- 14. 如何在android中以编程方式检测MIUI ROM?
- 15. 以编程方式检测处理器类型(Linux)
- 16. 以编程方式在Linux中检测桌面环境C
- 17. 如何以编程方式检测iPhone中的听筒?
- 18. 以编程方式检测Windows群集配置?
- 19. 如何在iphone中以编程方式检测dtmf音调?
- 20. 以编程方式检测已安装的Common Lisp实现
- 21. 以编程方式检测Nook平板电脑
- 22. 在Revit中如何以编程方式进行干扰检测?
- 23. 如何以编程方式检测64位或32位机器?
- 24. 以编程方式触发“检测显示”。
- 25. 如何以编程方式检测iphone 4
- 26. 在Silverlight中以编程方式检测ScrollView的结尾?
- 27. 以目标c编程方式检测youtube视频链接
- 28. 如何以编程方式检测系统热键?
- 29. 以编程方式检测自动回复电子邮件
- 30. 以编程方式使用C#检测Windows登录尝试
你为什么要这么做?我想不出很多理由,在哪里简单的“你在一个虚拟机下运行?”对话框是不够的(如果真的需要) – viraptor 2009-12-11 23:24:12
Duplicaet http://stackoverflow.com/questions/154163/detect-virtualized-os-from-an-application – saschabeaumont 2009-12-14 01:28:59
@viraptor这不是因为你不能想想没有的情况。例如,我正在识别计算机上的许可证和类似的东西,而且我需要知道我是否在虚拟机中,因为这将决定我要使用哪个硬件信息,并知道如果我在虚拟机中,我必须检查所有可能的虚拟机,包括VM Ware。 – Virus721 2014-08-04 09:19:47