在Windows Vista中的中/高完整性级别进程之间拖放

时间:2009-07-23 12:41:32

标签: security windows-vista process

在Windows Vista中,我无法将文件拖放到应用程序窗口,因为它作为高完整性级别进程运行。我需要将其运行得很高,但我还需要能够接受来自Windows资源管理器等低/中完整性级别进程的删除文件。我相信UIPI会阻止拖放操作。我知道我可以使用ChangeWindowMessageFilter函数来允许某些Windows消息绕过UIPI,但我不确定要添加哪些消息以允许拖放操作。 ChangeWindowMessageFilter是允许这种方式的正确方法,还是有更好的方法?谢谢!

1 个答案:

答案 0 :(得分:1)

考虑此博客条目的标题:
Why you shouldn’t touch Change­Window­Message­Filter with a 10-ft pole…”,
我想这不是最好的方法;)

  

现在,这看起来似乎是一个很好的方法 - 毕竟,当你确定可以完全验证收到的消息时,你只会使用Change­Window­Message­Filter,即使它是来自不受信任的来源,例如没有办法可能会出错,对吗?

     

嗯,问题是,即使你这样做,你经常打开你的程序无意中攻击
  考虑一下如何使用自定义窗口消息;几乎所有常见的控件都存在于自定义类消息范围内的“危险”消息(例如WM_USER和朋友)。

     

此外,许多程序和第三方库混淆了WM_USERWM_APP,这样您就可以让程序通过WM_USERWM_APP通过“危险”进行跨进程通信“用于做出敏感决策或包含指针参数的消息。


在本博客文章的评论中,讨论了另一种方法,但结论几乎相同:

  

我会使用RegisterWindowMessage,然后通过ChangeWindowMessageFilter允许   但是,请注意,您无法设计传递指针或其他不受信任值的跨进程窗口消息接口,或者您正在创建安全漏洞。

     

出于这个原因,我倾向于避免在大多数跨进程IPC(如果可能)的所有消息中使用窗口,因为使用它们以安全的方式执行非平凡的事情通常非常困难。


注意:此条目“So, who wants to design a feature today?”说明了同样的问题,并指出了Raymond Chen的深刻文章:

两者都详述了这个问题 此ServerFault问题“Why can’t I drag/drop a file for editing in notepad in Windows Server 2008?”还包括一些答案,但没有快速获胜。

另见article on IE