听起来像一个类似的问题(当我单击以管理员身份运行时,它实际上并没有以管理员身份运行) 但它是不同的东西。
让我们设置背景:活动目录环境,大型企业,Windows 10 企业版,所有用户都是没有特殊权限的普通用户,启用 Windows hello。
自从我们启用 Windows Hello(它可能与我不知道的其他安全变化齐头并进)以来,我注意到,每当我使用“以管理员身份运行”运行应用程序(或通过使用 UseShellExecute 和动词“runas”通过进程 API 启动进程)时,我都会看到 UAC 对话框,要求进行管理员身份验证(密码或指纹),然后应用程序将按预期启动,比如说“更多权限”。但是,许多应用程序不再识别它们以管理员身份运行(例如 Visual Studio),尽管它们在提升权限的情况下按预期工作。我们还使用 MakeMeAdmin 工具进行“真正的硬核管理员工作”,作为开发人员,我们确实需要管理员权限。
我注意到的是:
- 该用户是“BUILTIN\Network Configuration Operators”的成员,通常是“仅拒绝”
- 当“以管理员身份运行”时,该组变为“强制,启用”
- MakeMeAdmin 实际上将“BUILTIN\Administrators”组添加到用户声明中
那么,网络配置操作员组这里发生了什么?为什么应用程序不再知道“以管理员身份运行”状态?
我有自己的应用程序,其中我检查管理员组成员身份,以及进程的令牌完整性级别以确定权限提升级别,该级别在企业级和本地机器级都运行良好。
答案1
我认为不一致是由于程序的启动方式造成的。在 Windows 中,每个程序都附加了一个令牌,用于定义拥有的用户帐户和允许的权限。
登录期间,将启动 Explorer 以显示桌面,其中包含从用户帐户的权限派生的令牌。除非重新启动 Explorer,否则此令牌永远无法替换。MakeMeAdmin 已将用户帐户添加到管理员组这一事实并不能替换该令牌。
Explorer 启动的任何进程都将继承运行 MakeMeAdmin 之前的原始令牌,并且不会重新计算它。
在我看来,如果您希望拥有一致的状态,那么一旦 MakeMeAdmin 做出更改,您就应该重新启动所有正在运行的进程,包括 Explorer。我不能确定这是否会消除所有歧义,但它应该有助于限制歧义。