Skip to content
2008/11/30 / highmt

VistaのUIPI

きのうようやくVistaマシンを手に入れたのでちょっとだけ触ってみた。
Vistaといえば、ひどいOSという噂がいろいろあるけれども、今までのところ、そんなに悪い印象はない。
マシンスペックがいいからかもしれないけど。
VistaといえばUACが有名(?)だけれども、
触っていてUIPIというのも気になった。
(http://msdn.microsoft.com/ja-jp/library/aa480152.aspx#EKFAG)
ユーザーインタフェース特権の分離、というらしいのだけれども、
ようするに、UI権限というのがあって、UI権限の低いプロセスから
UI権限の高いプロセスへ対話をすることができないらしい。
たとえば、メッセージを投げても無視される。
で、困ったのは、SendInput()。
たとえば、ローレベルフックでキーボードイベントを拾い、それを
マウスクリックイベントに変えたいとする。
ローレベルフック自体は別のUI権限権限の高いプロセスで動いている。
このとき、あるUI権限の低いウィンドウがフォアグラウンドにある状態で上記を行うと、
マウスカーソルの下にあるUI権限の高いウィンドウへ、本来飛んでほしいマウスクリックイベントが飛ばない、
ように見える。
UI権限の高いウィンドウをフォアグラウンドにするとちゃんとクリックイベントが飛ぶので
SendInput()しているプロセスにはUI権限があるはずなのに…。
入力はいったんフォアグラウンドが受けとったことになっているんだろうか。
まだVistaのデバッグ環境作ってないので後でちゃんと調査しとこう。
というかもっと詳しい資料がほしい。

——–
2008/11/30 22:30 追記
このへんが詳しそう。
http://www.microsoft.com/downloads/details.aspx?FamilyID=BA73B169-A648-49AF-BC5E-A2EEBB74C16B&displaylang=en

2008/12/01 02:10 追記
ようするに、
・マニフェストにrequireAdministratorかつuiAccess=trueを指定する必要がある。
・uiAccess=trueとするためには、マイクロソフトに申請が必要である。
ということらしい。
ほかにも苦労している人がいるようだ。
(http://sourceforge.jp/tracker/index.php?func=detail&aid=13203&group_id=3682&atid=13656)

2008/12/20 17:10 追記
>このとき、あるUI権限の低いウィンドウがフォアグラウンドにある状態で上記を行うと、
>マウスカーソルの下にあるUI権限の高いウィンドウへ、本来飛んでほしいマウスクリックイベントが飛ばない、
・SetForegourndWindow()は効く。
・上記の「UI権限の高いウィンドウ」は誤り。上記で触れていたのはcmd.exeのウィンドウ。これはUI権限は中レベル。
ただし、CSRSSの下で動くので、UIPIは中レベルからのアクセスを拒否する。

2009/01/12 11:30 カテゴリ変更

広告
%d人のブロガーが「いいね」をつけました。