目次
1.「Vista のエレベータ」の開発動機
2.「Vista のエレベータ」の動作原理
3.「Vista のエレベータ」のセキュリティ
4. Windows Vista のUACは何故使いにくいのか
Windows Vista の管理者ログオンでは、権限必要時にいちいち昇格要求するUAC(ユーザアカウント制御)という機能がつきました。これがまたウザイ。何でこんな機能を Microsoft は付けたんだろう。作者は、Windows はもとより、汎用機のOS、MS-DOS、CP-M、PTOS、UNIX、Linux、Mac OS、様々なOSを使ったことがあります。その中でも Vista の使い勝手は最悪です(このの最後のほう)。これでは、Windows Vista は Microsoft の最後のOSになり、ポストMicrosoft を考えなければいけないのかとも考えてしまいました。
それはさておき、公開ソフトの Vista 対応をどうしたらよいのか悩んでいました。基本方針は標準インストールのときの設定(UACオン)で使えるようにする事です。特に問題視していたソフトは
Multi Function Alarm でした。MFA.exe を制限ユーザの権限で実行させておいた場合、管理者権限が必要なDOSコマンドは昇格が必要になり、その昇格要求のために後の処理が止まってしまいます。MFA.exe を管理者権限で実行した場合には、起動時に昇格要求に答える必要があり、さらにD&Dによるファイル名指定ができなくなります。UACの仕様により昇格していないウインドウから昇格しているウインドウへのD&Dは出来ません。
MFA.exe をサービス化にするということも考えました。サービスはUACとは関係ない権限で実行されています。そうすれば昇格要求は全く必要がありません。サービスを起動し、その中でコマンドプロンプトを起動させれば管理者権限になるのではないかと思ってやってみました。Windows 2000 ではうまくいきました。ところが Windows Vista ではあの黒い画面が出てきませんでした。Windows Vista ではセッション 0 の分離が仕様なので、DOSコマンド実行は出来ても画面操作をすることはできないことがわかりました。
昇格要求を全く無しにすることは無理ということがわかったので(よく考えれば当然といえば当然)、「昇格要求を1回にまとめて行ってしまうソフトを作って、作者公開ソフトの補助ソフトにしてしまえ。」ということで「Vista のエレベータ」を開発することにしました。
なお昇格のことを英語で Elevation(エレベーション)といいます。それが「Vista のエレベータ」の「エレベータ」の由来です。

VETray.exe を起動したときに、VEElev.exe を管理者権限で起動します。その昇格要求を許可すると上の図のようになります。VEElev.exe のみが管理者権限を持っています。VECmd.exe、VETray.exe は制限ユーザの権限しか持っていません。これでは、VECmd.exe、VETray.exe がDOSコマンド等を実行したとしても制限ユーザの権限でしか実行できません。実は VECmd.exe、VETray.exe はそれらを実行しているのではなく、その情報を VEElev.exe にプロセス間通信という手段を用い送っているだけです。VEElev.exe が実行を行うと管理者権限で実行したことになります。
実行を全て VEElev.exe 側で行うことによって、管理者権限での実行を可能にしているというのが当ソフトの原理です。
参考のため explorer.exe に関するDOSコマンドについては、別に述べておきます。
一般に管理者権限が付くか制限ユーザ権限がつくかはプロセス単位になります。explorer.exe に関しては以下の様にプロセスを新しく作らないようになっています。

しかし、当ソフトでコントロールパネル等を開くと、explorer のプロセスが1つから2つになります。よって、ユーザ権限により別プロセスになるのがわかります。

UACと当ソフトの使用環境でのセキュリティの強さの関係は、以下のようになると思われます。
| UAC有効 > UAC有効にして当ソフト使用 > UAC無効 |
パソコン環境を壊すなら制限ユーザ環境でも十分壊せると思うのですが...だって Windows ディレクトリの中身がすべて消えるよりも My Documents の中身が消えるほうが大変で復元が難しいし...また他パソコンへの感染についても最近はメールが主流だし...アドレス帳なら一般ユーザ権限でも読めるし...その辺の説明が Microsoft からあっても良いような気が...。
ところで上記で「UAC有効にして当ソフト使用」の環境は「UAC有効」の環境のほうにかなり近いということを以下で主張します。
一番懸念されるのは、他のプロセスが VEElev.exe とプロセス間通信をして管理者権限のDOSコマンド等を実行されてしまうという事ですが、実は前節でのプロセス間通信は暗号化しています。
さらにちょっと実験してみましょう。
またバルーンヘルプ情報を無くす事は出来ません。
上記の実験をした後で VECmd.exe のプロセスがループした状態になりますので、タスクマネージャで強制終了させてください。
作者が UNIX を使っていたときは su コマンドを使って管理者権限として使うというのは通常行っていました。X-Window というのがありましたが、基本は CUI(Character User Interface)でした。つまりコマンドプロンプトがベースです。この場合一度 su したコマンドプロンプトのウインドウが残ります。管理者権限が必要なコマンドは、暫くたった後も入れることが出来ました。
かたや Windows は GUI(Graphic User Interface)が基本です。不要なウインドウは昇格したウインドウでもすぐに閉じたくなります。また、Windows ユーザは CUI に慣れていません。このせいで昇格要求が何度も何度も必要になります。これがUACが使いにくい理由と考えています。
Windows Vista で作者は何故かコマンドプロンプトを多用するようになりました。Windows 95 ではほとんど使っていませんでした。
そもそも管理者権限でログオンしていて認証が終わっているのに、権限を制限されるのは心外です。それなら一般ユーザのログオンで管理者権限が必要な操作をしたくなったら昇格要求をするほうが良かったと作者は思っています。と思ったら一般ユーザではそうなっていた。