closehandle API,x64 Windows上的无效句柄exception

如官方文档( 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”。

你有什么想法,为什么发生这种情况? 谢谢。