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