2009-07-23 29 views
1

在Windows Vista中,我無法將文件拖放到我的應用程序窗口,因爲它作爲高完整性級別的進程運行。我需要將它運行得很高,但我還需要能夠接受來自Windows資源管理器等低/中等完整性級別進程的丟棄文件。我相信這是阻止拖放操作的UIPI。我知道我可以使用ChangeWindowMessageFilter函數來允許某些Windows消息繞過UIPI,但我不確定要添加哪些消息來允許拖放操作。 ChangeWindowMessageFilter是否允許使用這種方法,或者有更好的方法嗎?謝謝!在Windows Vista中的中/高完整性級別進程之間拖放

回答

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?」 說明了同樣的問題,並指出雷蒙德陳有見地的文章:

這兩個詳細說明問題。
此ServerFault問題「Why can’t I drag/drop a file for editing in notepad in Windows Server 2008?」也包含一些答案,但沒有快速獲勝。

參見本article on IE

+0

我知道我的開放應用起來使用這種方法的危險性,因此我不會繞過任何指針結構。我真的需要拖放功能才能工作,Vista的「安全性」真的讓我很煩惱。 – 2009-07-23 13:08:34

相關問題