检查另一个进程是否在.NET中具有管理员权限

em7*_*m70 4 .net c# windows winapi uac

我正在寻找一种方法来检查远程进程是否具有我(完全托管)代码的管理员权限.可以安全地假设我的代码将以管理员权限运行,因此我并不关心实现我的目标的技术是多么具有侵入性,但是我正在寻找一种必须与XP SP3 x86兼容的完全托管方式从win7 x64开始.

提前致谢!

编辑:为了澄清,我说的是在同一台机器上运行的进程,无论用户是谁启动它.我想确保与进程关联的标识属于Administrators组,或者主线程具有完全权限,特别关注继承提升进程打开的句柄并写入存储而没有任何限制,但应用于进程使用"以管理员身份运行"选项生成.

And*_*ers 6

OpenProcess(PROCESS_QUERY_[LIMITED_]INFORMATION)+ OpenProcessToken(TOKEN_DUPLICATE)获取令牌,然后DuplicateTokenEx(TOKEN_QUERY,SecurityImpersonation,TokenImpersonation)获取模拟令牌,然后将该令牌和SID传递CreateWellKnownSid(WinBuiltinAdministratorsSid)CheckTokenMembership.

为了能够(几乎)打开每个PROCESS_QUERY_INFORMATION访问进程,您需要以管理员身份运行并具有调试权限.在Vista和以后你可以使用PROCESS_QUERY_LIMITED_INFORMATION.

此答案中提供的示例代码.