如何启用普通和 UAC 提升权限应用程序之间的拖放
Posted
技术标签:
【中文标题】如何启用普通和 UAC 提升权限应用程序之间的拖放【英文标题】:How to enable drag and drop between normal & UAC elevated privileges applications 【发布时间】:2012-12-15 00:35:00 【问题描述】:我已阅读this answer 了解如何将资源管理器中的拖放文件(通常在没有额外管理员权限的情况下运行)与 UAC 提升的应用程序一起使用。
人们会认为将权限提升到 EXE 会提供 更多 权限,但 MS 设法提供 less 权限并同时破坏拖放功能时间!
无论如何,尽管赞赏,但 Arnaud Bouchez 先生(禁用 UIPI - 用户界面特权隔离)给出的答案似乎有点hackish,我的问题是:有推荐的方法来以编程方式启用拖放而不会弄乱用户的注册表
我正在考虑在清单中请求“拖放功能”或类似的东西。
注意:我主要在 Windows 7 上遇到这个问题,但我认为这个问题与从 Vista 开始的所有 Windows 版本有关
【问题讨论】:
事实上 MS 做对了。您不希望某些低寿命程序将消息发送到提升的进程。你应该重新考虑为什么你希望你的 GUI 应用程序首先运行提升。如果有必要,请考虑保持在安全设计范围内,不要接受来自低权限应用的内容。 @DavidHeffernan:一个这样的例子是我大量使用的 Total Commander:我总是将它提升为能够读/写程序文件和 system32 文件夹,但我仍然希望能够从/到拖动探险家。 @Remko 如果您将所有时间都花在写入这些文件夹上,最好禁用 UAC @DavidHeffernan:MS 基本上不允许提升的程序通过拖放与 Windows 资源管理器进行交互(这不是低寿命程序!)。恕我直言,我不敢相信有人没有将无法使用资源管理器中的拖动视为障碍! (顺便说一句,是的,我确实有非常充分的理由以提升模式运行我的应用程序:() 你为什么要跑高架?无论如何,如果你想回避这个,那么只需关闭 UAC。如果您让低权限进程调用高权限进程中的命令,那么低权限进程更容易获得管理员权限。那是粉碎攻击。 【参考方案1】:您可以使用ChangeWindowMessageFilterEx
更改特权应用程序窗口上的UIPI过滤器,以便接收文件拖放相关消息。 WM_DROPFILES
是最明显的一个,WM_COPYDATA
是另一个。还有一条未记录的消息:$0049
,您会发现有时它被称为WM_COPYGLOBALDATA
。事实上,我相信对最后一个的搜索会发现一些与您的问题相关的代码示例。
【讨论】:
以上是关于如何启用普通和 UAC 提升权限应用程序之间的拖放的主要内容,如果未能解决你的问题,请参考以下文章