是否有任何 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
获取令牌(显然),然后使用GetTokenInformation
和TokenUser
标志获取所有者的SID。然后就可以使用LsaLookupSids2
获取用户名了。
是否有任何 API 可以获取在特定条件下运行的进程列表 用户...但是
CreateToolhelp32Snapshot
返回所有进程 在系统中的所有用户下运行。
您可以通过上述方法从中过滤掉指定的用户。
【讨论】:
当我们需要 TokenUser 时为什么要使用 TokenOwner。如果想获取用户帐户。和LookupAccountSid
设计不好的api,最好使用LsaLookupSids
@RbMm,感谢您的指点,已修复。并使用LsaLookupSids2
而不是LsaLookupSids
,因为它可能会在后续版本中被更改或不可用。以上是关于是否有任何 C 函数或 API 来获取在当前登录用户下运行的进程列表的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows - API - 如何获取/使用当前用户权限(或单点登录)