繁体   English   中英

如果OpenProcess()失败并显示ACCESS_DENIED,如何从pid获取进程文件名?

[英]How to get a process file name from pid, if OpenProcess() fails with ACCESS_DENIED?

我正在尝试从其pid获取进程名称。 用户以管理员身份运行,已启用UAC,未提升权限。

一些系统进程,如services.exe ,有自己的安全性等方式,建立OpenProcess(PROCESS_QUERY_INFORMATION ...失败并ERROR_ACCESS_DENIED 。同样的结果与PROCESS_QUERY_LIMITED_INFORMATION访问权限。不过,我可以看到进程浏览器至少可以列出所有这些过程,以及其pid和文件名(以非提升管理员身份运行时)。

我的问题是,鉴于未提升权限的管理员无法遵循OpenProcess()+ GetProcessImageFileName()的通常路线,我该怎么做(从pid获取文件名)?

您是否尝试过使用CreateToolhelp32Snapshot()检索到的句柄来处理Process32First()和Process32Next()? 它没有提供完整的路径,但至少应该让您获得文件名。

如果没有为您的进程启用SE_DEBUG特权,则无法打开系统进程(更精确地说,是在另一个帐户下运行的进程-在本例中为用户SYSTEM)。 如果您以管理员身份运行,则可以轻松设置特权: http : //support.microsoft.com/kb/131065/en-us

您是否尝试过PROCESS_QUERY_LIMITED_INFORMATION 它要求较低的访问级别,该访问级别至少可以提供可执行文件的名称。 它允许您调用QueryFullProcessImageName ,它提供了您要查找的信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM