当某些安全相关操作需要执行时,Windows会在“安全桌面”上显示UAC提示。显然有某个API创建了安全桌面并在其上创建了一个窗口,但我不知道如何找到其中涉及的机制。我猜可以通过反向工程UAC机制来了解,但我不太擅长那种水平的反向工程(而且我相信这会涉及某些法律后果...)
无论如何,我知道有一个API可以在当前会话中创建新的桌面,但任何文档中都没有提到安全桌面。出于好奇,我想知道整个安全桌面/UAC提示创建过程是如何工作的。
声明:这纯粹是理论性的,我不打算在我的代码中使用它。
当某些安全相关操作需要执行时,Windows会在“安全桌面”上显示UAC提示。显然有某个API创建了安全桌面并在其上创建了一个窗口,但我不知道如何找到其中涉及的机制。我猜可以通过反向工程UAC机制来了解,但我不太擅长那种水平的反向工程(而且我相信这会涉及某些法律后果...)
无论如何,我知道有一个API可以在当前会话中创建新的桌面,但任何文档中都没有提到安全桌面。出于好奇,我想知道整个安全桌面/UAC提示创建过程是如何工作的。
声明:这纯粹是理论性的,我不打算在我的代码中使用它。
从系统的角度来看,安全桌面只是具有适当访问控制列表(ACL)的普通桌面。请注意,CreateDesktop允许您为新桌面指定安全描述符。
据我所知,安全桌面没有特殊行为,因此我认为不需要假设涉及任何其他API(无论是否记录在案)。
你可能已经看到了这个,但以防万一,也为了其他用户的参考,这里有一个关于UAC架构的漂亮流程图...
http://msdn.microsoft.com/en-us/library/bb756945.aspx
就UAC而言,据我所知,与特定应用程序配合使用的所有信息都在嵌入exe或dll的清单中,在链接阶段中。自从.Net更改以来,即使是非.Net应用程序也需要在其中包含清单,以告诉Windows它们不是.Net。在较新版本的Visual Studio中构建的所有内容,或者至少我构建的内容,在链接器选项的清单部分具有广泛的UAC选项,包括允许您禁用它的选项。
requestedExecutionLevel=requireAdministrator
)setup.exe
、installer.exe
、update.exe
)(可以通过组策略禁用)
ERROR_ELEVATION_REQUIRED
(740)
ShellExecute是调用AppInfo(应用程序信息)服务的函数。AppInfo服务启动Consent.exe
,这是UAC提示。它执行提升操作。
AppInfo启动新进程,然后ShellExecute返回。
有一个UAC克隆源,也适用于XP。它被称为SuRun,并包含一些更多功能,例如特定应用的自动提升。
博客和文档是德语的:http://kay-bruns.de/wp/software/surun 德语文档包含大量详细信息:http://kay-bruns.de/download/SuRun1209.pdf
Sourceforge页面:http://sourceforge.net/projects/surun/ 它是C ++