繁体   English   中英

如何检查管理员权限 C#

[英]How to check admin rights C#

如何检查我的应用程序是否以管理员权限启动? 我现在使用这个代码:

public static bool IsUserAdministrator()
        {
            //bool value to hold our return value
            bool isAdmin;
            try
            {
                //get the currently logged in user
                WindowsIdentity user = WindowsIdentity.GetCurrent();
                WindowsPrincipal principal = new WindowsPrincipal(user);
                isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
            }
            catch (UnauthorizedAccessException ex)
            {
                isAdmin = false;
            }
            catch (Exception ex)
            {
                isAdmin = false;
            }
            return isAdmin;
        }

此代码检查用户权限,我需要检查应用程序拥有的权限。 例如,我不是管理员,但是当应用程序以管理员权限启动时,此代码返回 false。 谢谢!

这是执行检查的正确方法,我自己在 PowerShell 配置文件中使用它来区分提升的会话。

我怀疑您没有考虑用户访问控制 (UAC) 的影响。 当用户登录时,他们会获得一个分配的安全令牌对象。 这包含他们自己的安全 ID (SID)、他们所属组的 SID 以及他们拥有的权限列表(以及这些权限是否已启用)。

启用 UAC 后,如果您具有某些权限或者是本地管理员的成员,那么当您进行交互式登录时,您将获得两个 * 令牌:一个包含所有内容,另一个删除管理访问 SID 和权限。 前一个令牌用于每个启动的进程,除非在使用后一个令牌时启动提升。

因此,管理员无法在没有额外步骤的情况下行使全部权力——这有助于防止恶意软件在完全控制系统的情况下启动。

看到这一点的最佳工具是 Process Explorer。 进程属性对话框的安全选项卡显示进程的安全令牌的内容(并将“完整性级别”列添加到主显示将显示哪些进程被提升) - 运行提升的进程资源管理器以查看完整信息。

因此,您的代码只会为管理员运行的进程返回 true,该进程也被提升(以管理员身份运行)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM