我正在寻找一种方法来检查远程进程是否具有来自我的(完全托管)代码的管理员权限。可以安全地假设我的代码将以管理员权限运行,因此我并不关心实现我的目标的技术是多么具有侵入性,但是我正在寻找一种必须与XP SP3 x86兼容的完全托管方式从win7 x64开始。
提前致谢!
编辑:为了澄清,我说的是在同一台机器上运行的进程,无论启动它的用户是谁。我想确保与进程关联的标识属于Administrators组,或者主线程具有完全权限,特别关注继承提升进程打开的句柄并写入存储而没有任何限制,但应用于进程使用“以管理员身份运行”选项生成。
答案 0 :(得分:6)
OpenProcess(PROCESS_QUERY_[LIMITED_]INFORMATION)
+ OpenProcessToken(TOKEN_DUPLICATE)
获取令牌,然后DuplicateTokenEx(TOKEN_QUERY,SecurityImpersonation,TokenImpersonation)
获取模拟令牌,然后将该令牌和SID从CreateWellKnownSid(WinBuiltinAdministratorsSid)
传递到CheckTokenMembership
为了能够打开(几乎)PROCESS_QUERY_INFORMATION
访问权限的每个流程,您需要以管理员身份运行debug privileges。在Vista及更高版本中,您可以使用PROCESS_QUERY_LIMITED_INFORMATION
。
可用的示例代码in this answer。
答案 1 :(得分:1)
您可以使用GetTokenInformation或IsUserAnAdmin API调用。
答案 2 :(得分:1)
要检查进程是否从管理组中的用户启动,您应该使用Anders描述的方式。要检查Vista或Windows 7上的完整性级别,请使用GetTokenInformation并指定TokenIntegrityLevel
令牌类,以获取包含与令牌的强制完整性级别相关联的SID的TOKEN_MANDATORY_LABEL
结构。
答案 3 :(得分:1)
我已经使用Anders提供的解决方案创建了 Process.Extensions.dll 扩展名