获取进程路径时访问被拒绝

Posted

技术标签:

【中文标题】获取进程路径时访问被拒绝【英文标题】:Access denied while getting process path 【发布时间】:2011-03-24 21:51:25 【问题描述】:

我正在尝试通过 pid 获取进程路径,但出现 Win32Exception(访问 ID 被拒绝)。

代码如下所示:

string path = Process.GetProcessById(pid).MainModule.FileName

我曾尝试将 OpenProcess 与 GetModuleFileNameEx 一起使用,但 OpenProcess 返回 0。我什至尝试根据 C# – How to enable SeDebugPrivilege 启用 SeDebugPrivilege,但没有帮助。

以上代码适用于大多数进程,但 SynTPHelper.exe(Synaptics Pointing Device Helper)会引发错误该应用程序在与我的代码相同的用户名下运行。我的应用程序和进程都以 64 位运行。

是否可以在不以管理员身份运行我的应用程序的情况下检索路径?

编辑

即使我没有以管理员身份运行任务管理器,它也能够“打开文件位置”。

【问题讨论】:

【参考方案1】:

最后我设法解决了。事实证明,在 Vista 及更高版本中有用于获取进程路径和新进程访问的新功能(PROCESS_QUERY_LIMITED_INFORMATION):

QueryFullProcessImageName

以下是适用于非提升进程的代码:

    private static string GetExecutablePathAboveVista(UIntPtr dwProcessId)
    
        StringBuilder buffer = new StringBuilder(1024);
        IntPtr hprocess = OpenProcess(ProcessAccessFlags.PROCESS_QUERY_LIMITED_INFORMATION, false, dwProcessId);
        if (hprocess != IntPtr.Zero)
        
            try
            
                int size = buffer.Capacity;
                if (QueryFullProcessImageName(hprocess, 0, buff, out size))
                
                    return buffer.ToString();
                
            
            finally
            
                CloseHandle(hprocess);
            
        
        return string.Empty;
    

【讨论】:

非常感谢aboutmycode.com/net-framework/…(也是同一个Giorgi?)。简单的复制/过去/重新格式化/添加一些命名空间就可以了!!! :) @Andreas:是的,那只是我的博客。 PROCESS_QUERY_LIMITED_INFORMATION = 0x1000; msdn.microsoft.com/en-us/library/windows/desktop/… @Giorgi 请问,我该如何处理AccessFlags,我的项目无法解析。 @LucasRodriguesSena This 似乎有效(你必须重命名 PROCESS_QUERY_LIMITED_INFORMATION)。【参考方案2】:

好吧,服务删除访问权限以使即使管理员也无法打开该进程,这当然不是闻所未闻的。服务有足够的权限这样做,像 audiodg.exe 这样的 DRM 组件很容易做到这一点。鼠标垫助手不会让我觉得需要这种保护。但是,嘿,为什么有人需要弄乱鼠标垫助手?

【讨论】:

我不是想弄乱它,我只是想获取在当前用户下运行路径的进程列表。 联系 Synaptics 以获得支持。准备好为什么?问题。 audiodg.exe 也是受保护的进程 IIRC,因此它可以免费获得类似的保护

以上是关于获取进程路径时访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

vs2022路径拒绝访问

解决 对路径bin oslyn..的访问被拒绝

“对路径的访问被拒绝.” 是怎么回事

无法复制文件 - 访问路径被拒绝

对路径的访问被拒绝怎么办?

“对路径的访问被拒绝.” 是怎么回事