キノコの自省録

日々適当クリエイト

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