次の方法で共有


アクセス許可の検出ツール (Permcalc.exe)

更新 : 2007 年 11 月

最小付与セット決定ツール (Permcalc.exe) を使用して、アセンブリのパブリック エントリ ポイントにアクセスするために呼び出し元に付与する必要があるアクセス許可を評価します。このツールは .NET Framework Version 2.0 で新たに追加されました。これは上級ユーザー向けのツールです。

PermCalc [options] assemblyName [assemblyDependencyName…]

パラメータ

オプション

説明

-CleanCache

すべてのキャッシュ ファイルを再構築します。

-HostProtection

HostProtectionAttribute によって保護されているカテゴリに関する情報を報告します。

-Internet

正確なアクセス許可値を決定できない場合に、インターネット ゾーンのアクセス許可を推定値として使用します。既定では、アクセス許可値を決定できない無制限のアクセス許可状態を使用して過大に評価します。

-Out fileName

fileName に出力を転送します。既定値は、assemblyName.PermCalc.xml です。-Sandbox オプションを指定している場合は、sandbox.PermCalc.xml です。

-Sandbox

エントリ ポイントの呼び出し元が必要とするアクセス許可ではなく、アプリケーションの実行に必要な最小限のアクセス許可のサンドボックスを報告します。

-Show

出力後に、出力ファイルの内容を表示します。

-Stacks

出力に呼び出し履歴を含めて、アクセス許可確認要求の要求元を示します。

-Under

正確なアクセス許可値を決定できない場合に、アクセス許可を過小に評価します。アクセス許可値を決定できない場合、既定では過大に評価します。

-?

使用方法を表示します。

引数

説明

assemblyName

アクセス許可の評価対象となるアセンブリ。

assemblyDependencyName

assemblyName が依存するアセンブリ。

解説

最小付与セット決定ツールは、アプリケーションの実行に必要な最小限のアクセス許可セットを計算します。これは、すべてのアプリケーション アセンブリと依存関係アセンブリのすべての適用可能なコード パスをチェックすることによって行います。このツールは、アプリケーション アセンブリごとのアクセス許可セットを返します。

このツールはアプリケーションのエントリ ポイントから開始し、すべてのアプリケーション アセンブリ、およびそのアプリケーションから呼び出される共有ライブラリとシステム ライブラリのすべてのコード パスをトレースします。また、コード パスのトレースに関係したすべてのアセンブリを含む、シミュレートされた呼び出し履歴を保持します。ツールは、コード パスをトレースするたびに、宣言的な確認要求、リンク確認要求、および宣言的なスタック ウォーク修飾子が存在するかどうかをチェックします。宣言セキュリティ アクションで使用されるすべてのアクセス許可状態はコンパイル時には必ず既知であるため、アプリケーション アセンブリに対するすべての宣言セキュリティ アクションの影響を正確に計算できます。たとえば、宣言的な確認要求を使用している場合は、その時点の呼び出し履歴に存在する各アセンブリの最小付与アクセス許可セットが、確認要求されたアクセス許可セットで更新されます。シミュレートされた呼び出し履歴で宣言的なアサートが見つかった場合は、その呼び出し履歴でアサートの上にあるすべてのアセンブリに対して、アサートされたアクセス許可セットと確認要求されたアクセス許可セットの積集合だけが更新されます。同様に、リンク確認要求が見つかった場合は、リンク確認要求の時点よりも上にある、シミュレートされた呼び出し履歴に存在する呼び出し元だけが、要求されたアクセス許可セットで更新されます。

コード パスのトレースの一部として、各メソッドの Microsoft Intermediate Language (MSIL) 全体がトレースされますが、このトレースはアプリケーションの主要なエントリ ポイント メソッドで開始されます。メソッドの MSIL トレースで強制的なアクセス許可セット アクションが見つかった場合は、次の更新アルゴリズムがアセンブリごとに実行されます。

  • 強制的な確認要求、リンク確認要求、アサート、許可のみ、または拒否で使用されるアクセス許可状態を静的に決定できる場合、またそのアクセス許可状態が、実行時にのみ使用できる状態に依存していないことが確実であるときは、アプリケーション アセンブリに対するこれらのセキュリティ アクションの影響を決定でき、プロファイリングされているすべてのアセンブリの最小付与アクセス許可セットに対する宣言セキュリティ アクションの影響が計算されます。

  • 強制的なセキュリティ アクションで使用されるアクセス許可セットの状態を静的に決定できない場合は、無制限のアクセス許可状態 (たとえば、無制限のセキュリティ アクセス許可や無制限のファイル IO 読み取りアクセス許可など) が想定されます。その結果、一部のインスタンスでは、アプリケーションの実行に必要なアクセス許可が過大に評価されます。この既定の動作をオーバーライドするには、-Under オプションを使用します。

  • メソッドに複数のコード パスが存在しており、異なるセキュリティ アクションの注釈が一部のコード パスに含まれる場合は、確認要求の和集合とアサートの積集合が使用されます。これは、実行時にアプリケーションが使用するメソッドのコード パスをツールが決定できない可能性があるためです。

アセンブリのサイズやその依存関係の複雑さによっては、ツールが完全な分析を実行するのに数分かかることもあります。

次の例を実行するには、SDK のコマンド プロンプト ウィンドウにコマンドを入力します。例のファイル名は、実際のファイル名と置き換えてください。

次のコマンドは、すべてのキャッシュ ファイルを再構築し、mylib.dll アセンブリの呼び出し履歴を含めます。出力は、XML ファイルの既定のビューアに表示されます。

Permcalc.exe -cleancache -stacks -show mylib.dll

次のコマンドは、myapp.exe アプリケーションによって実行される必要がある最小限のアクセス許可のサンドボックスを報告します。出力は、XML ファイルの既定のビューアに表示されます。対象ファイルは myapp.exe、依存ファイルは mydep1.dll と mydep2.dll です。

Permcalc.exe -sandbox -show myapp.exe mydep1.dll mydep2.dll

参照

参照

.NET Framework ツール

SDK のコマンド プロンプト