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

时间:2011-10-18 13:45:58

标签: c++ windows security winapi uac

当需要执行某些与安全相关的操作时,Windows会在“安全桌面”上显示UAC提示。显然有一些API在某处创建了安全桌面并在其上创建了一个窗口,但我不知道在哪里可以找到所涉及的机制。我想我可以对UAC机制进行逆向工程,但我在逆向工程的那个层面上并不擅长(我很确定会涉及到一些法律后果......)

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

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

4 个答案:

答案 0 :(得分:3)

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

据我所知,安全桌面没有特殊行为,因此我认为没有理由假设涉及任何其他API(已记录或未记录)。

答案 1 :(得分:1)

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

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

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

自.Net更改以来,即使是非.Net应用程序也需要有一个清单,告诉Windows它们不是.Net。在较新版本的Visual Studio中构建的所有内容,或者至少是我内置的内容,都在链接器选项的清单部分中具有各种UAC选项,包括允许您禁用它的那些选项。

答案 2 :(得分:0)

有一个源代码的UAC克隆也适用于XP。它被称为SuRun,并包含一些功能,如特定应用程序的自动提升。

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

Sourceforge页面:http://sourceforge.net/projects/surun/ 这是C ++

答案 3 :(得分:0)

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

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

  • 应用程序要求运行提升权限(requestedExecutionLevel=requireAdministrator
  • 试探性认为该应用程序可能是安装程序(例如,名为setup.exeinstaller.exeupdate.exe(可以通过组策略禁用) < / li>
  • AppCompat说需要提高屎的应用程序

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

  

ERROR_ELEVATION_REQUIRED(740)

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

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

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

  • 如果用户是拒绝了管理员特权的管理员,则会提示您进行授权
  • 如果该用户是标准用户,则提示输入凭据

AppInfo启动新进程,然后ShellExecute返回。

来源