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

我试图从它的PID获取进程名称。 用户正在以pipe理员身份运行,已启用UAC,未升级。

有些系统进程,比如services.exe ,其安全性设置的方式是OpenProcess(PROCESS_QUERY_INFORMATION ...失败,返回ERROR_ACCESS_DENIEDPROCESS_QUERY_LIMITED_INFORMATION访问权限相同,但是我可以看到Process Explorer至less可以列出所有这些进程,以及他们的pid和文件名(当以非升级的pipe理员身份运行时)。

我的问题是,我怎样才能做到这一点(获得文件名从PID),鉴于非高架的pipe理员不能按照通常的路线OpenProcess()+ GetProcessImageFileName()?

你有没有尝试过CreateToolhelp32Snapshot()检索句柄Process32First()和Process32Next()? 它不会给你完整的路径,但至少应该让你获得文件名。

您无法打开系统进程(更准确地说,在另一个帐户下运行的进程 – 在这种情况下为用户SYSTEM),而不为您的进程启用SE_DEBUG特权。 如果您以管理员身份运行,则可以轻松设置权限: http : //support.microsoft.com/kb/131065/en-us

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