2009-07-23 6 views
1

Windows Vistaでは、アプリケーションを高いレベルのプロセスとして実行しているため、アプリケーションのウィンドウにファイルをドラッグ&ドロップできません。私はそれを高いレベルで実行する必要がありますが、Windowsエクスプローラのような低/中レベルのプロセスからドロップされたファイルを受け入れる必要もあります。ドラッグ&ドロップ操作をブロックしているのはUIPIだと思います。私は、特定のWindowsメッセージがUIPIをバイパスできるようにChangeWindowMessageFilter関数を使用できることを知っていますが、ドラッグアンドドロップ操作を許可するメッセージを追加するかわかりません。 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の "セキュリティ"は本当に私を悩ますようになっています。 –

+0

私は理解して:あなたはこの質問にいくつかの他の提案を見つけることができます注意してください。http://serverfault.com/questions/39600/why-cant-i-drag-drop-a-file-for-editing-in-notepad-in -windows-server-2008(UIPI(ユーザーインターフェイス特権分離)を無効にすることを含む) – VonC

+0

残念ながら、私のアプリケーションのユーザーにUIPIを無効にするように要求することはできません。私は、優先レベル間のドラッグ・アンド・ドロップ操作の背後にある理由を理解していますが、実際にはアプリケーション開発が不必要に複雑になります。 :( –