【问题标题】:Find out if another application is running as admin查看是否有其他应用程序以管理员身份运行
【发布时间】:2015-07-27 21:36:41
【问题描述】:

我正在尝试确定是否有其他应用程序正在以管理员身份运行。有 100 多个关于查找您的应用程序是否有效的 SO 问题,而不是另一个应用程序。

如果我执行var processes = Process.GetProcesses(); 并遍历它们,它们似乎没有任何“提升”或“IsAdministrator”属性。我还在这里找到了一个获取所有者的功能,但它们都以“My-Laptop\Me”的形式返回,所以这对我来说并不像我希望的那样工作。

有没有办法找到这个?我在 Win 8.1 上,并且更喜欢适用于 7 的东西,但如果它只适用于 8.1+,那完全没问题。

谢谢!

编辑: 我的应用程序必须以管理员身份运行。

【问题讨论】:

  • UAC 是 shatter 攻击 的解决方案,这是一个最初存在于 Windows 中的令人讨厌的安全问题,它的工作原理是由一个非特权进程劫持另一个进程的提升权限来造成损害。有很多方法可以做到这一点,就像发送击键一样简单。愚蠢的微软人,他们当然应该轻松找到这样的过程!仍然不起作用,UAC 并不是那么愚蠢。那么添加该功能有什么意义呢?对它没有任何用处。

标签: c# process wmi


【解决方案1】:

您可以使用this answer 中的技术,只需将Process.GetCurrentProcess().Handle 替换为另一个进程的Process.Handle

如果您查看代码(那里有相当多的代码),它会获取进程“用户令牌”(进程正在运行的权限)并检查此令牌是否具有管理员角色,

【讨论】:

  • my Answer 那里。它还检测本地系统管理员
【解决方案2】:

假设您的进程没有以管理员身份运行,尝试获取有关通过 UAC 提升的进程的信息(例如其MainWindowTitle)将引发 AccessDenied 异常,其中未提升的过程将允许您访问该信息。这假设您还验证了进程的所有者以检查它是否是您。

try
{
    var foo = process.MainWindowTitle;
    return false; //Process is not elevated
}
catch (Win32Exception ex)
{
    return true; //Process is elevated if ex error code is AccessDenied
}

【讨论】:

  • 看来我的程序必须以管理员身份运行才能按预期工作。
猜你喜欢
  • 2017-09-15
  • 2015-02-06
  • 2012-01-15
  • 1970-01-01
  • 2011-05-20
  • 2011-09-24
  • 2010-12-19
  • 1970-01-01
  • 2011-12-29
相关资源
最近更新 更多