当“__COMPAT_LAYER=RunAsInvoker”不起作用时,您可以欺骗应用程序让其认为它在 Windows 10/11 中以管理员权限运行吗?

当“__COMPAT_LAYER=RunAsInvoker”不起作用时,您可以欺骗应用程序让其认为它在 Windows 10/11 中以管理员权限运行吗?

我在 Windows 10 中运行应用程序安装程序。其清单显示应以管理员权限运行。如果我使用环境设置运行该应用程序,则__COMPAT_LAYER=RunAsInvoker该应用程序应以调用用户身份运行,并且不再请求提升权限。这在许多情况下都有效,但是在某些情况下,应用程序启动后会立即弹出 UAC 对话框。

为了100%清楚:

  • 我在启动应用程序时已设置__COMPAT_LAYER=RunAsInvoker。这通常有效,但在某些情况下,应用程序仍会要求提升。

  • 我已将安全策略设置User Account Control: Detect application installations and prompt for elevation已禁用(我以为这会是真正的解决方案,但事实并非如此)。

  • 我不希望该应用程序以管理员权限运行。它不需要做任何需要管理员的事情如果确实如此,我希望它只是尝试并失败。

  • 该应用程序没有弹出自己的消息框(例如,检查它是否可以写入 %ProgramFiles%,然后向我显示自定义消息。这是安全桌面上的 UAC 提示)。

为什么会发生这种情况?尽管有“RunAsInvoker”选项,应用程序仍可以继续请求提升权限吗?

如何让应用程序仅使用当前用户的令牌运行,如果权限不足则失败?

请注意,我无法找到除设置之外的任何答案__COMPAT_LAYER=RunAsInvoker

答案1

为什么会发生这种情况?尽管有“RunAsInvoker”选项,应用程序仍可以继续请求提升权限吗?

是的。就这么简单。它可以检测到它没有被提升,然后以提升权限重新启动。这将触发 UAC 提示。

如果不修改程序或者利用程序中已经内置的隐藏参数等,就无法停止这种行为。

答案2

假设你为了完成工作,需要进入房间Maintenance Room。你去了那里,但门被锁上了。

你去找经理,说门锁上了,你现在无法工作。经理要求你出示你的权限级别,但你不想向经理出示,因为你希望他知道你应该被允许进入那里。

这个故事的寓意是,如果你欺骗应用程序,让它以为它有权限,而实际上它没有,那也没关系。它需要这些权限来执行管理功能,如果没有这些权限,它就会失败,只是方式不同而已。

就您而言,安装程序可能会写入用户无权写入的注册表或磁盘位置,例如HKEY_LocalMachineC:\Program Files。在执行用户无权访问的操作的所有情况下,UAC 提示将出现,以获取执行该操作的权限。

要么确保安装程序不会写入这些位置,要么接受安装程序需要提升的事实。

相关内容