closehandle API,x64 Windows上的无效句柄异常

时间:2012-06-11 01:21:31

标签: windows debugging winapi windows-7-x64

正如官方文件(closehandle API description)所述。

  

如果应用程序在调试器下运行,则该函数在收到无效的句柄值或伪句柄值时将抛出异常。

因此,可以使用以下代码来检测程序是否正在被调试(因为句柄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编译了这段代码,创建了一个32位二进制文​​件。

它在Windows XP和Windows 7 32bit上正常工作,但它在Windows 7 64bit上不起作用,因为它总是返回“未调试”。

你知道为什么会这样吗? 谢谢。

0 个答案:

没有答案