如官方文档( closehandle API描述 )所述。
如果应用程序在debugging器下运行,则该函数将在接收到无效的句柄值或伪句柄值时引发exception。
由于这个原因,下面的代码可以用来检测程序是否正在被debugging(因为句柄0x1总是无效的)。
#include "stdafx.h" #include <windows.h> #include <stdio.h> #include <string> int _tmain(int argc, _TCHAR* argv[]){ bool flag = false; __try { CloseHandle((HANDLE)0x1); } __except (EXCEPTION_EXECUTE_HANDLER) { flag = true; } if (flag == false){ printf("Not debugged\n"); }else{ printf("Debugged\n"); } }
我使用Visual Studio 2008编译了这段代码,创build了一个32位的二进制文件。
它在Windows XP和Windows 7 32位上正常工作,但在Windows 7 64位上不能正常工作,因为它总是返回“未debugging”。
你有什么想法,为什么发生这种情况? 谢谢。