2007-02-08 [長年日記]

VistaでのUACとファイル・レジストリの仮想化

UAC (User Account Control)が有効な状態だと、管理者グループに属しているユーザでも通常は管理者権限がない状態でプログラムが実行されます。管理者権限で実行されるのは、

  • シェルから[管理者として実行]を選択した場合
  • manifestのrequestedExecutionLevelでrequireAdministrator(やhighestAvailable)を指定した場合
  • インストーラだと判定された場合

などです。

管理者権限がない状態で実行されたプログラムから、C:\WindowsやC:\Program Filesや、レジストリのHKLM\Softwareなど以下に書き込むと、ユーザが書き込める領域にリダイレクトされます。この仮想化は以下の場合には機能しません。

  • サービスなど
  • 64bitアプリケーション
  • manifestでrequestedExecutionLevelを指定した場合

というわけで、Vista未対応アプリケーションはmanifestにrequestedExecutionLevelが指定されていないのでリダイレクトが有効、Vistaに対応しているのであればrequestedExecutionLevelを指定するべきで、その場合にはリダイレクトは無効になる、ということのようです。

ちなみに、デフォルトで入っているアプリ(メモ帳など)はrequestedExecutionLevelが指定されているためリダイレクトが無効になっています。つまり、Vista非対応アプリでC:\Program Files以下にファイルを書き込むと、そのファイルはメモ帳ではそのまま開くことができません(リダイレクト先のファイルのパスを指定すれば開くことができます)。

以下は参考サイト。

[Q3] Vista用のマニフェスト

Vista用にマニフェストにtrustInfoを加えてみたところ、mt.exeが警告を出すようになってしまいました。

mt.exe:manifest authoring warning 81010002:Unrecognized Element "trustInfo" in namespace "urn:schemas-microsoft-com:asm.v3".

VistaのSDKに入っているmt.exeを使えば警告が出なくなるようですが、試しに入れてビルドしてみたところ、一部のファイルでコンパイラがメッセージも出さずにエラーで終了してしまいます。VS2005 SP1も入れる必要があるのかも知れませんが、まだβなのでためらわれるところ。

とりあえず、マニフェスト自体は正しく入っているようで、ファイルやレジストリの仮想化は無効になりました。

[C++] ISO C++0x: Complete Public Review Draft In October 2007?

C++0xの部分的なドラフトが公開されました。

追加されたものは、

  • コンセプト
  • ガベージコレクション
  • 並列処理のメモリモデル
  • 並列処理のライブラリ

らしいです。もちろんTR1やTR2も入るようです。2009年に出すというマイルストーンが出ていますが(出ないと0xじゃなくなってしまいますし)、本当に出て、実装もされるのでしょうか。


トップ «前の日記(2007-02-07) 最新 次の日記(2007-02-11)»