Share via


使用權限計算機工具 (Permcalc.exe)

更新:2007 年 11 月

最小權限授權集決策工具 (Permcalc.exe) 是用來估計呼叫端要存取組件的公用進入點必須獲得授權的使用權限。這個工具是 .NET Framework 2.0 版中的新功能。是特別設計給進階使用者使用的工具。

 PermCalc [options] assemblyName [assemblyDependencyName…]

參數

選項

說明

-CleanCache

重新建構所有快取檔案。

-HostProtection

報告有關 HostProtectionAttribute 受保護分類的資訊。

-Internet

在無法判斷確切使用權限值的情況下,會使用網際網路區域使用權限做為估計值。預設值是在無法判斷使用權限值處,透過使用無限制的使用權限狀態,進行高估。

-Out fileName

將輸出導向 fileName。如果指定了 -Sandbox 選項,預設值為 assemblyName.PermCalc.xml 或 sandbox.PermCalc.xml。

-Sandbox

報告應用程式可以在其中執行的最小使用權限沙箱,以取代進入點呼叫端所需的使用權限。

-Show

完成後顯示輸出檔。

-Stacks

在輸出中包含呼叫堆疊,以顯示使用權限要求的原點。

-Under

在無法判斷確切使用權限值時的情況下,設法低估使用權限。預設值是在無法判斷確切使用權限值時高估。

-?

顯示用法資訊。

引數

說明

assemblyName

要計算使用權限的組件。

assemblyDependencyName

assemblyName 所依賴的組件。

備註

最小權限授權集決策工具會檢查所有應用程式組件及相依組件之所有適用的程式碼路徑,計算執行應用程式所需的最小使用權限集合。工具會依應用程式組件傳回使用權限集合。

從應用程式的進入點開始,工具會追蹤所有程式碼路徑,遍及所有應用程式組件以及從應用程式呼叫的共用和系統程式庫。此工具會維持其中包含與程式碼路徑相關之所有組件的模擬呼叫堆疊。每次進行程式碼路徑追蹤時,此工具會檢查是否有宣告要求、連結要求,和宣告式堆疊查核行程 (Stack Walk) 修飾詞 (Modifier)。由於所有用在宣告式安全性動作中的使用權限狀態在編輯時期都必須為已知,所有宣告式安全性動作在應用程式組件上的作用都可以精確計算。例如,如果使用了宣告式要求,此時呼叫堆疊上每一個組件的最小權限授權集都會用要求的使用權限集合更新。如果宣告式判斷提示 (Assert) 是在模擬呼叫堆疊上找到,則只為在呼叫堆疊上判斷提示之上的所有組件,更新已判斷提示之使用權限集合之間的交集以及所要求的使用權限集合。同樣地,如果找到連結要求,也只以所要求的權限集合,更新模擬呼叫堆疊上連結要求的指標之上的呼叫端。

部分的程式碼追蹤是透過每個方法之 Microsoft intermediate language (MSIL) 的追蹤,從應用程式的主要進入點方法開始。如果在方法 MSIL 追蹤中找到命令式使用權限集合動作,則為每一個組件執行下列更新演算法:

  • 如果用在命令式要求、連結要求、判斷提示、Permit Only 或 Deny 中的使用權限狀態可以靜態方式判斷,就一定不是與僅能在執行階段使用的任何狀態相依,則應用程式組件上這種安全性動作的效用就能加以判斷,而且會為所有已分析組件之最小授權使用權限集合上的宣告式安全性動作計算其效用。

  • 如果用在命令式安全性動作中的使用權限集合狀態無法以靜態方式判斷,則假設為無限制的使用權限狀態,例如,無限制的安全性權限或無限制的檔案 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 命令提示字元