是否有任何 C 函数或 API 来获取在当前登录用户下运行的进程列表

Posted

技术标签:

【中文标题】是否有任何 C 函数或 API 来获取在当前登录用户下运行的进程列表【英文标题】:Is there any C function or API to get the list of process running under the current log in user 【发布时间】:2019-08-26 06:23:45 【问题描述】:

我正在编写代码来搜索给定的 .exe 文件是否在特定用户帐户下运行。 是否有任何 API 可以获取在特定用户下运行的进程列表。否则我们可以从 C++ 中的进程中获取进程的用户名。

我从互联网上进行了一些搜索,发现“CreateToolhelp32Snapshot”会有所帮助。但是它返回了在系统中所有用户下运行的所有进程。我希望打印在特定用户下运行的进程。

【问题讨论】:

请避免使用“C/C++”一词。没有这样的语言,我们中的许多老前辈都非常不喜欢它。如果您正在编写 C++ 程序,则仅使用 c++ 标记。 this 有帮助吗? @uneven_mark... 我正在寻找特定于 Windows 的内容。 使用 Win32_Process WMI 类可以让进程运行,使用 GetOwner 命令可以得到每个进程的用户 ID。查看此链接了解如何访问 WMI link 请记住,用户可以重命名可执行映像。无论您计划识别该可执行文件,都可能无法正常工作。有了这个,这完全像XY Problem。你最终想要完成什么? 【参考方案1】:

我正在编写代码来搜索给定的 .exe 文件是否正在运行 是否在特定用户帐户下。

使用OpenProcessToken 获取令牌(显然),然后使用GetTokenInformationTokenUser 标志获取所有者的SID。然后就可以使用LsaLookupSids2获取用户名了。

是否有任何 API 可以获取在特定条件下运行的进程列表 用户...但是CreateToolhelp32Snapshot返回所有进程 在系统中的所有用户下运行。

您可以通过上述方法从中过滤掉指定的用户。

【讨论】:

当我们需要 TokenUser 时为什么要使用 TokenOwner。如果想获取用户帐户。和LookupAccountSid 设计不好的api,最好使用LsaLookupSids @RbMm,感谢您的指点,已修复。并使用LsaLookupSids2 而不是LsaLookupSids,因为它可能会在后续版本中被更改或不可用。

以上是关于是否有任何 C 函数或 API 来获取在当前登录用户下运行的进程列表的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows - API - 如何获取/使用当前用户权限(或单点登录)

如何在 C++/OpenGL 中获取当前鼠标位置?

是否有任何 linux 函数调用通过传递线程 ID 来获取特定线程的 CPU 使用率?

如何获取 API Key 来访问服务预授权?

是否有时间服务器提供API,我可以抓住当前的东部时间?

Jinja - 是不是有任何内置变量来获取当前 HTML 页面名称?