当需要执行某些与安全相关的操作时,Windows会在“安全桌面”上显示UAC提示。显然有一些API在某处创建了安全桌面并在其上创建了一个窗口,但我不知道在哪里可以找到所涉及的机制。我想我可以对UAC机制进行逆向工程,但我在逆向工程的那个层面上并不擅长(我很确定会涉及到一些法律后果......)
无论如何,我知道有一个API可以在当前会话中创建新桌面,但在我找不到的任何文档中都没有提到安全桌面。出于好奇,我想知道整个安全桌面/ UAC提示创建是如何工作的。
免责声明:这纯粹是理论上的,我不打算在我的任何代码中部署它。
答案 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.exe
,installer.exe
,update.exe
)(可以通过组策略禁用) < / li>
如果 CreateProcess 决定需要以管理员权限启动该进程,并且用户当前没有管理员权限,则该进程将失败并返回错误:
ERROR_ELEVATION_REQUIRED
(740)
ShellExecute 是 CreateProcess 的高级包装。它知道如何处理来自 CreateProcess 的新错误代码。
ShellExecute是调用 AppInfo (应用程序信息)服务的函数。 AppInfo服务启动Consent.exe
,这是UAC提示符。然后执行海拔。
AppInfo启动新进程,然后ShellExecute返回。