Outil Permission Calculator (Permcalc.exe)
Mise à jour : novembre 2007
L'outil de détermination du jeu d'autorisations minimum (Permcalc.exe) permet d'estimer les autorisations qui doivent être accordées aux appelants pour accéder aux points d'entrée publics d'un assembly. Il s'agit d'un nouvel outil de la version 2.0 du .NET Framework. Il est destiné aux utilisateurs avancés.
PermCalc [options] assemblyName [assemblyDependencyName…]
Paramètres
Option |
Description |
---|---|
-CleanCache |
Reconstruit tous les fichiers du cache. |
-HostProtection |
Rapporte des informations sur les catégories protégées de HostProtectionAttribute. |
-Internet |
Dans le cas où des valeurs d'autorisation exactes ne peuvent pas être déterminées, utilise les autorisations de la zone Internet comme estimation. La valeur par défaut consiste à surestimer à l'aide d'un état d'autorisation illimitée lorsque les valeurs d'autorisation ne peuvent pas être déterminées. |
-Out fileName |
Dirige la sortie vers fileName. La valeur par défaut est assemblyName.PermCalc.xml, ou sandbox.PermCalc.xml si l'option -Sandbox est spécifiée. |
-Sandbox |
Rapporte le bac à sable (sandbox) d'autorisation minimum dans lequel une application peut s'exécuter au lieu des autorisations requises par les appelants du point d'entrée. |
-Show |
Affiche le fichier de sortie une fois l'opération terminée. |
-Stacks |
Inclut des piles des appels dans la sortie pour afficher l'origine des demandes d'autorisation. |
-Under |
Dans les cas où des valeurs d'autorisation exactes ne peuvent pas être déterminées, essaie de sous-estimer les autorisations. La valeur par défaut consiste à surestimer lorsque les valeurs d'autorisation ne peuvent pas être déterminées. |
-? |
Affiche les informations d'utilisation. |
Argument |
Description |
---|---|
assemblyName |
Assembly pour lequel calculer des autorisations. |
assemblyDependencyName |
Assembly duquel dépend assemblyName. |
Notes
L'outil de détermination du jeu d'autorisations minimum calcule le jeu d'autorisations minimum requis pour exécuter une application en examinant de tous les chemins de code applicables de tous les assemblys de l'application et des assemblys de dépendance. L'outil retourne un jeu d'autorisations par assembly d'application.
En partant du point d'entrée de l'application, l'outil trace tous les chemins d'accès de code à travers tous les assemblys d'application et les bibliothèques système et partagées appelées à partir de l'application. L'outil maintient une pile des appels simulée qui contient tous les assemblys impliqués dans la trace du chemin d'accès du code. Sur chaque trace du chemin d'accès du code, l'outil vérifie la présence de demandes déclaratives, de demandes de liaison et de modificateurs de parcours de pile déclarative. Étant donné que tout état d'autorisation utilisé dans les actions de sécurité déclarative doivent être connues à la compilation, les effets de toutes les actions de sécurité déclarative sur les assemblys d'application peuvent être calculés avec exactitude. Par exemple, si une demande déclarative est utilisée, le jeu d'autorisations minimum pour chaque assembly sur la pile des appels à ce stade est mis à jour avec le jeu d'autorisations demandé. Si une assertion déclarative se trouve sur la pile des appels simulée, seule l'intersection entre le jeu d'autorisations déclaré et le jeu d'autorisations demandé est mis à jour pour tous les assemblys au-dessus de l'assertion sur la pile d'appel. De même, si une demande de liaison est trouvée, seul l'appelant sur la pile des appels simulée au-dessus du point de la demande de liaison est mis à jour avec le jeu d'autorisations demandé.
Une partie de la trace du chemin d'accès du code est une trace à travers le langage intermédiaire Microsoft (MSIL) de chaque méthode, en commençant par la méthode de point d'entrée principal de l'application. Si des actions de jeu d'autorisations impératives se trouvent dans la trace du MSIL de la méthode, l'algorithme de mise à jour suivant est exécuté pour chaque assembly :
Si l'état d'autorisation utilisé dans la demande impérative, la demande de liaison, l'assertion, les méthodes Deny ou PermitOnly peut être déterminé statiquement, et qu'il est certain de ne dépendre d'aucun état disponible uniquement au moment de l'exécution, l'effet d'une telle action de sécurité sur les assemblys d'application peut être déterminé et est calculé pour déterminer les effets des actions de sécurité déclarative sur le jeu d'autorisations minimum de tous les assemblys profilés.
Si l'état du jeu d'autorisations utilisé dans une action de sécurité impérative ne peut pas être déterminé statiquement, l'état sans restriction de l'autorisation est supposé, par exemple, l'autorisation de sécurité non restreinte ou les autorisations de lecture E/S de fichier non restreinte. Dans quelques instances, cela peut conduire à une surestimation des autorisations requises pour l'exécution d'une application. Utilisez l'option -Under pour substituer ce comportement par défaut.
S'il existe plusieurs chemins d'accès de code à travers une méthode et que certains ont des annotations d'action de sécurité différentes, alors l'union des demandes et l'intersection des assertions sont utilisées, car l'outil peut ne pas être capable de déterminer lequel des chemins d'accès de code possibles à travers une méthode l'application prendra au moment de l'exécution.
Suivant la taille et la complexité des assemblys et de leurs dépendances, l'outil peut prendre plusieurs minutes pour effectuer une analyse complète.
Exemples
Vous pouvez exécuter les exemples suivants en tapant les commandes dans la fenêtre Invite de commandes du Kit de développement SDK, en remplaçant les noms des exemples par vos noms de fichiers.
La commande suivante reconstruit tous les fichiers cache et inclut des piles des appels pour l'assembly mylib.dll. Il affiche la sortie dans la visionneuse par défaut des fichiers XML.
Permcalc.exe -cleancache -stacks -show mylib.dll
La commande suivante rapporte le bac à sable (sandbox) d'autorisation minimum que l'application myapp.exe doit exécuter. Il affiche la sortie dans la visionneuse par défaut des fichiers XML. Le fichier cible est myapp.exe, et les fichiers dépendants sont mydep1.dll et mydep2.dll.
Permcalc.exe -sandbox -show myapp.exe mydep1.dll mydep2.dll