如何比较HANDLE类型的两个变量

时间:2010-08-17 07:52:22

标签: c++ winapi process handle

我有一个HANDLE类型的变量。 第一个HANDLE变量是一个进程HANDLE(名称为hProcess),它没有PROCESS_QUERY_INFORMATION访问权限。 第二个变量是一个进程HANDLE(名称为hwndProcess),我已经通过OpenProcess函数打开并具有PROCESS_QUERY_INFORMATION访问权限。我确信这两个进程应该具有相同的句柄。 但是当我将它们比作如下时,它会返回false; if(hProcess == hwndProcess){做某事} 我该怎么做?

3 个答案:

答案 0 :(得分:5)

没有明确的方法来检查两个句柄是否引用相同的进程。唯一的方法是查询过程信息并检查,例如,在每个句柄上使用GetProcessId来检查进程ID。

如果您没有必要的访问权限来调用所需的查询功能,那么您可以尝试调用DuplicateHandle来获取具有更多访问权限的新句柄。但是,如果失败,则无法判断句柄是否属于同一进程。

答案 1 :(得分:0)

hProcess不得保存将要关闭的Process的ProcessHandle。它可以并且大部分时间都是NULL。我正在做类似的事情以获得终止进程的PID     if((hProcess == NULL) || (hProcess == GetCurrentProcess())){
pid = GetCurrentProcessId();
} else {
pid = ProcessHandleToId(hProcess); }

您确定,它是一个访问权限问题,您的功能不会失败,因为句柄是NULL?

答案 2 :(得分:0)

Windows 10 SDK具有CompareObjectHandles(HANDLE,HANDLE),如果句柄引用相同的基础内核对象,则它返回TRUE。 而且您不必担心访问权限。