只是一个简单的答案,它基本上会指向一些 API 调用以供阅读。
首先您需要获取拥有进程的 ID,然后获取该进程的句柄:
DWORD proc_id = 0U;
DWORD thread_id = GetWindowThreadProcessId(hWnd, &proc_id);
// assuming it all works, open the process
HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, proc_id);
PROCESS_QUERY_INFORMATION 表示您正在尝试打开具有查询其信息的权限的进程...例如其令牌等。然后您有几个选项 - 您使用的部分取决于您为什么需要信息。
选项 1 是使用GetSecurityInfo API 获取有关进程的安全信息。这将允许您请求诸如进程的所有者 (SID)、安全访问信息 (SACL/DACL) 等信息。在我的脑海中,是这样的:
GetSecurityInfo(hProc, SE_KERNEL_OBJECT, ...);
您传入的参数将取决于您想要什么信息。请记住,您可能无权要求提供此信息。
选项2是获取Process Token,它可以让你以不同的方式获取相似的信息。您可以通过调用OpenProcessToken 然后调用GetTokenInformation 来执行此操作。同样,您传递的参数将取决于您想要信息的目的。这样的事情应该让你开始:
HANDLE hToken;
OpenProcessToken(hProc, TOKEN_READ, &hToken);
GetTokenInformation(hToken, TOKEN_USER, ...); // get the user associated with the token
请注意,我没有尝试过这些,我只是查看了MSDN 并做出了有根据的猜测。我也没有进行错误检查...请记住,如果您正在查询进程,那么某些调用可能会失败,因为您无权请求该信息。