Vistaのセッション
ちょっと覚書程度に。
Vistaはウザイと評判のUACに見られるように、
デフォルトで行えるユーザの権限がかなり低下した。
UACと直接関わりがないが、
セッションの分離についてちょっと調査したので、
記述しておく。
Vista持ってないけど、セッション構造を知りたい人などもどうぞ。
Vistaにログオンした直後の、プロセス構成は以下の通り。
(Process Explorer利用)
System
-smss.exe (セッションマネージャ) csrss.exe (Session 0)
wininit.exe (Session 0)
-services.exe (Session 0) -各種サービス(略)ほとんどがSession 0 -csrss.exe - Session 1 -winlogin.exe - Session 1 アプリケーション Session 1
見てのとおり、サービスのほとんどがセッション0で起動されている。
XP以前では、サービスの起動はログイン後に行われていたが、
Vistaではログイン前に行われている、ということになる。
セッションを分離させたことで、
セキュリティリスクが減るのはなんとなくわかるが、
何か影響はないのか?という疑問が浮かぶ。
XP以前のコードのままではできなくなることは、
1.デバドラが起動するダイアログを表示できない
2.セッションをまたいだSend(Post)Message
3.プリフィックスのない名前付きカーネルオブジェクトなど。
1について
デバドラはコンソールセッション(セッション0)なので、
今までの状態ではUIを提示できない。
2について
これはそのまま。
SendMessageやPostMessageはセッションをまたいで使用することができない。
なので、サービスを利用したアプリケーションや、
アプリケーションを参照するサービスなどで不都合が生じる。
3について
名前つきカーネルオブジェクトをセッション間で共有する場合、
Global\プリフィックスをつけなけらばならない。
これらについては、ここに書かれているのを、
適当にピックアップしただけなので、
本家を是非参照いただきたい。
上記の問題の解決法についても書いてあるので。
http://www.microsoft.com/japan/whdc/system/vista/services.mspx