KB2973201適用でリモートデスクトップ使用時にキーマップがおかしくなる
Vista以降のすべてのWindowsにおいて、KB2975685 がインストールされていると、リモートデスクトップ利用して のどかのLLフック版をローカルとリモートの両方に入れて使っているときに、キーマッピングがおかしくなる。 http://support.microsoft.com/kb/2973201 [MS14-039] Windows オンスクリーン キーボードのセキュリティ更新プログラムについて (2014 年 7 月 8 日) https://technet.microsoft.com/ja-jp/library/security/MS14-039 マイクロソフト セキュリティ情報 MS14-039 – 重要 スクリーン キーボードの脆弱性により、特権が昇格される (2975685) この更新プログラムによって、機能にセキュリティ関連の変更が起こりますか? はい。この更新プログラムは、低レベルのキーボード/マウス入力フックを作成するために開発者が使用する構造体に、新しいセキュリティ関連フラグを追加します。この機能変更の詳細については、KBDLLHOOKSTRUCT structure (英語情報) および MSLLHOOKSTRUCT structure (英語情報) を参照してください。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms644967(v=vs.85).aspx KBDLLHOOKSTRUCT structure flagsに、LLKHF_LOWER_IL_INJECTED(0x00000002)が追加されている。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms644970(v=vs.85).aspx MSLLHOOKSTRUCT structure flagsに、LLMHF_LOWER_IL_INJECTED(0x00000002)が追加されている。 どうやら、VMware Playerでも影響が出ている様子。 http://okwave.jp/qa/q8675656.html 【AHK】MouseGestureL.ahkを語るスレ【ジェスチャ】によれば、7/11かららしい。 http://read2ch.net/software/1384313234/ 対応策(以下推測が一部入っている。) システム側で、SendInput()などを使ったソフトでの入力で、実際に低整合性レベルのアプリから送られた場合には、低整合性レベルのフラグ(LLKHF_LOWER_IL_INJECTED)が付与されることになった様子。その際、同時にLLKHF_INJECTEDも付けられる。(事実) 普通、LLKHF_INJECTEDが立っていると、LL Hookルーチンでは捨てるので、低整合性レベルのアプリは一切キー入力を送ることが出来なくなっている。(推測) さらに、RDPの場合には、以前は、ローカル側から送られたSendInput()には、LLKHF_INJECTEDは付与されていなかったはずだが、LLKHF_LOWER_IL_INJECTEDが 立つので、追加された様子。(推測) ローカル環境の場合は、のどかの場合、LL HookルーチンではLLKHF_INJECTEDが付いていれば捨てる処理でよく、そうしないとキーマップ変更したものが再度入力されループを起こすので、今回のKB2975685は問題が無い。なお、同時にLL Hookチェーンの中でLLKHF_INJECTEDが立っていれば処理せず、次に回すアプリがあるので、それに対してはキーマップ変更処理できないはずである。(推測) RDP使用時のリモート環境ののどかでは、LLKHF_INJECTEDが付いているので、LL Hookルーチンで捨てられてしまい、キーマップ変更後のキーはローカルから送られてこない。 フラグを取ってしまって、次のHookルーチンに送ればよいのか、送る際に別のフラグを用意してループしないようにすればよいのか、検討中である。 また高IL版ののどかを使うとまた挙動は異なるだろう。整理しないと対策は難しい。低IL版あるいは起動後に整合性レベルを変えるような実装も考えた方が良いかもしれない。
Details