function isruninvm: Boolean;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;
function IsRunInVMWare: Boolean;begin Result := False;{$IFDEF CPU386} try asm push edx push ecx push ebx mov eax, 'VMXh' mov ecx, $0A mov edx, 'VX' in eax, dx cmp ebx, 'VMXh' setz [Result] pop ebx pop ecx pop edx end; except end;{$ENDIF}end;
function IsRunInVMWare: Boolean;begin Result := False;{$IFDEF CPU386} try asm push edx push ecx push ebx mov eax, 'VMXh' mov ecx, $0A mov edx, 'VX' in eax, dx cmp ebx, 'VMXh' setz [Result] pop ebx pop ecx pop edx end; except end;{$ENDIF}end;
解决方案 »
- c# 写邮件(公司里不能用smtp,用的是exchange)
- Eval 错误,急.,........................
- 如何确定local machine是否能访问某特定url
- 菜鸟提问,高手帮忙 请问这段程序讲的是什么意思!
- ♀XPath的SelectNodes查询有奇怪问题,请高手指教!♂(
- 算法,有兴趣的高手进来试试
- 请问重画时候闪烁的问题怎么解决?
- MySQL Access SQLServer 这三个数据库哪个好啊?
- 装上日文98后,怎么样调出中文输入法,上中文网站也是乱码,怎么办?
- 日资的公司和私营的公司哪个好点呢,大家给点意见,说说理由
- C#图片插入问题
- WPF,数据绑定资源x:Key得到资源
那您能帮我把这段C++语言整理并教我怎么编译成DLL,让C#调用吗?谢谢!
#include "windows.h "
DWORD __forceinline IsInsideVPC_exceptionFilter(LPEXCEPTION_POINTERS ep);
bool IsInsideVPC();
bool IsInsideVMWare();
int CheckVPC(); // 发布版本使用MiniPE (3.5KB)
#ifndef _DEBUG #pragma comment(linker, "/ENTRY:EntryPoint ")
#pragma comment(linker, "/SECTION:VPC, ")
#pragma comment(linker, "/MERGE:.data=VPC ") int EntryPoint()
{
CheckVPC();
ExitProcess(0);
}
#else
int WINAPI WinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPSTR lpCmdLine, IN int nShowCmd )
{
return CheckVPC();
}
#endif // _DEBUG int CheckVPC()
{
if(IsInsideVPC())
MessageBox(NULL, "你在虚拟机电脑MicroSoft Virtual PC中 ", "提示 ", MB_OK|MB_ICONINFORMATION);
else if(IsInsideVMWare())
MessageBox(NULL, "你在虚拟电脑VMWare中! ", "提示 ", MB_OK|MB_ICONINFORMATION);
else
MessageBox(NULL, "你在真实的电脑中! ", "提示 ", MB_OK|MB_ICONINFORMATION); return 0;
} DWORD __forceinline IsInsideVPC_exceptionFilter(LPEXCEPTION_POINTERS ep)
{
PCONTEXT ctx = ep-> ContextRecord;
ctx-> Ebx = -1;
ctx-> Eip += 4;
return EXCEPTION_CONTINUE_EXECUTION;
} bool IsInsideVPC()
{
bool rc = false;
__try
{
_asm push ebx
_asm mov ebx, 0 // It will stay ZERO if VPC is running
_asm mov eax, 1 // VPC function number
_asm __emit 0Fh
_asm __emit 3Fh
_asm __emit 07h
_asm __emit 0Bh
_asm test ebx, ebx
_asm setz [rc]
_asm pop ebx
}
// The except block shouldn 't get triggered if VPC is running!!
__except(IsInsideVPC_exceptionFilter(GetExceptionInformation()))
{
} return rc;
} bool IsInsideVMWare()
{
bool rc = true; __try
{
__asm
{
push edx
push ecx
push ebx
mov eax, 'VMXh '
mov ebx, 0
mov ecx, 10
mov edx, 'VX '
in eax, dx
cmp ebx, 'VMXh '
setz [rc]
pop ebx
pop ecx
pop edx
}
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
rc = false;
} return rc;
} 就是这段
请问如何封装呢?
我需要在这些代码上加些什么才可以被编译成DLL进行方便的调用吗?
Delphi教程中有专门的这样课程,你可以查阅相关书籍。