[英]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.