マニフェストとVirtualStore

VC2005Expressだとデフォルトで以下のリンカオプションになる

VC2008Expressだとデフォルトで以下のリンカオプションになる

2008以降のリンカは /MANIFESTがあるとデフォルトでUACのレベルがasInvokerになる。manifestでUACが指定されていればVirtual Storeが働かなくなる。
/MANIFESTUACは2008から追加されたオプション。
/MANIFESTFILEはリンカが出力するファイル。
manifestは実行ファイルのリソース(RT_MANIFEST)に追加される。

ではVSのプロジェクト設定のマニフェストツールとは何か
ビルドログを見るとmt.exeはリンカの後に実行されている。

link.exeが終わった後にmt.exeが実行されており、以下のオプションで実行されていることがわかる。

/manifestで指定されたファイル(.\Release\def2eight.exe.intermediate.manifest)を..\Release\def2eight.exeのRT_MANIFESTに埋め込んでいるんだと思われる。def2eight.exe.intermediate.manifestはリンカがはいたファイル。#1はRT_MANIFEST配下のオーディナル番号だろう。

よくわからないがリンカはリソースにマニフェストを埋め込む機能はなくmt.exeがそれをやっているということか。

最後に自身のプロセスがVirtual Store有効になっているかどうかはプロセスのトークンがTokenVirtualizationEnabledを持っているかでわかる。前にも書いたようにマニフェストでUACレベルを設定していればこれは無効になる。VS2008で作ったアプリはデフォルトで無効になる。VS2005ではUACレベルが設定されていないので有効になる。それ以前のアプリはマニフェストがそもそもないので有効になる。

Leave a Reply

Your email address will not be published. Required fields are marked *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)