UAC 风格的提升提示

Pol*_*ial 3 c# windows security winapi uac

我有兴趣在临时会话中启动一个窗口,例如 UAC 提示的显示方式。有几个人对这个概念感兴趣,所以我想我会在这里问。本质上,我们想要的是一个像 UAC“你确定要<...>”提示的提升窗口,但带有任意窗口。最终目标是防止窗口事件挂钩和密码输入期间可能发生的各种其他问题。

我快速浏览了 UAC API 和其他一些地方,但没有什么特别有用的地方。显然 UAC 提示以某种方式提升到他们自己的桌面会话,所以必须有一种方法来以这种方式创建窗口。

Nor*_*elm 6

您可以使用CreateDesktop创建桌面。您可以使用SwitchDesktop切换到新桌面。然后你可以在你的主线程上调用SetThreadDesktop并绘制你的窗口。要通过将“默认”作为lpszDesktop调用OpenDesktop并使用带有此句柄的 SwitchDesktop来获取默认桌面的句柄。您还可以在某个桌面上运行进程。为了做到这一点,您必须将STARTUPINFO结构的lpDesktop成员设置为该进程应该在其上运行的桌面的名称。使用它们后关闭桌面的句柄(CloseDesktop)。

您可以通过这种方式在自己的桌面上显示自己的窗口。

UAC 和登录 UI 使用的安全桌面称为“Winlogon”。为了访问它,您需要系统权限。卢克在他的一个回答中提供了一个例子。

Brian R. Bondy 写了一篇关于桌面和窗口站博客文章,值得一读。