UAC提示提升-它是如何工作的

UAC prompt elevation - how does it work?

本文关键字:何工作 工作 提示 UAC      更新时间:2023-10-16

Windows在执行安全相关操作时,会在"安全桌面"中显示UAC提示。显然在某个地方有一些API可以创建安全桌面并在其上创建一个窗口,但我不知道在哪里可以找到相关的机制。我想我可以对UAC机制进行逆向工程,但我不太擅长逆向工程(而且我很确定这涉及到一些法律后果……)

无论如何,我知道有一个API可以在当前会话中创建新桌面,但是在我能找到的任何文档中都没有提到安全桌面。出于好奇,我想知道整个安全桌面/UAC提示创建是如何工作的。

免责声明:这纯粹是理论上的,我不打算在我的任何代码中部署它

从系统的角度来看,安全桌面似乎只是一个具有合适ACL的完全正常的桌面。请注意,CreateDesktop允许您为新桌面指定安全描述符。

据我所知,安全桌面没有特殊的行为,所以我认为没有理由假设涉及任何额外的API(文档化或不文档化)。

您可能已经看到了这一点,但为了以防万一,对于其他阅读本文的用户,这里有一个很好的UAC架构流程图....

http://msdn.microsoft.com/en-us/library/bb756945.aspx

至于UAC,据我所知,UAC如何与特定应用程序一起工作的所有信息都在链接阶段嵌入在exe或dll中的清单中。

自从。net改变后,即使非。.Net应用程序需要有一个清单来告诉Windows它们不是。Net。在新版本的Visual Studio中构建的所有内容,或者至少是我所构建的内容,在链接器选项的清单部分中都有广泛的UAC选项,包括允许您禁用它的选项。

有一个UAC克隆的源代码也可以在XP上工作。它被称为SuRun,包含了一些更多的功能,比如针对特定应用程序的自动提升。

博客和文档是德文的:http://kay-bruns.de/wp/software/surun德语文档包含大量详细信息:http://kay-bruns.de/download/SuRun1209.pdf

Sourceforge页面:http://sourceforge.net/projects/surun/它是c++

在Windows中启动进程的方式是使用CreateProcess

CreateProcess执行3个检查来查看应用程序是否需要提升:

  • 应用程序要求运行升高(requestedExecutionLevel=requireAdministrator)
  • 启发式认为应用程序可能是一个安装程序(例如命名为setup.exe, installer.exe, update.exe)(可以通过组策略禁用)
  • AppCompat说这个糟糕的应用程序需要被提升

如果CreateProcess决定进程需要以管理员权限启动,而用户当前没有管理员权限,则失败并返回错误:

ERROR_ELEVATION_REQUIRED (740)

ShellExecute知道如何处理这个新的错误代码

ShellExecuteCreateProcess的高级包装。它知道如何处理来自CreateProcess的新错误代码。

ShellExecute是调用AppInfo(应用程序信息)服务的函数。AppInfo服务启动Consent.exe,这是UAC提示符。它执行提升。

  • 如果用户是管理员权限被拒绝,则提示进行授权
  • 如果用户是标准用户,则提示输入凭据

AppInfo启动新进程,ShellExecute返回。

<标题>
  • 频道9:UAC -什么。如何去做。为什么。 (3/5/2007)