CA2141 : Les méthodes transparentes ne répondent pas aux LinkDemandsCA2141:Transparent methods must not satisfy LinkDemands

TypeNameTypeName TransparentMethodsMustNotSatisfyLinkDemandsTransparentMethodsMustNotSatisfyLinkDemands
CheckIdCheckId CA2141CA2141
CategoryCategory Microsoft.SecurityMicrosoft.Security
Modification avec ruptureBreaking Change RuptureBreaking

CauseCause

Une méthode transparente de sécurité appelle une méthode dans un assembly qui n’est pas marqué avec le AllowPartiallyTrustedCallersAttribute ) l’attribut APTCA (ou une méthode transparente de sécurité satisfait une SecurityAction .LinkDemand pour un type ou une méthode.A security transparent method calls a method in an assembly that is not marked with the AllowPartiallyTrustedCallersAttribute (APTCA) attribute, or a security transparent method satisfies a SecurityAction.LinkDemand for a type or a method.

Description de la règleRule Description

Répondre à un LinkDemand est une opération de sécurité sensibles qui peut entraîner l’élévation de privilèges involontaire.Satisfying a LinkDemand is a security sensitive operation which can cause unintentional elevation of privilege. Code transparent de sécurité ne doit pas répondre aux LinkDemands, car il n’est pas soumis aux mêmes exigences d’audit de sécurité que le code critique de sécurité.Security transparent code must not satisfy LinkDemands, because it is not subject to the same security audit requirements as security critical code. Les méthodes transparentes dans des assemblys de niveau 1 de sécurité règle ensemble entraîne tous les LinkDemands qu’ils satisfont en demandes complètes au moment de l’exécution, ce qui peut entraîner des problèmes de performances.Transparent methods in security rule set level 1 assemblies will cause all LinkDemands they satisfy to be converted to full demands at run time, which can cause performance problems. Assemblys de niveau 2 de jeu de règle de sécurité, les méthodes transparentes ne parviendra pas à compiler dans le de compilateur juste-à-temps (JIT) s’ils tentent de répondre à une LinkDemand.In security rule set level 2 assemblies, transparent methods will fail to compile in the just-in-time (JIT) compiler if they attempt to satisfy a LinkDemand.

Dans les assemblys qui usee de sécurité de niveau 2, les tentatives par une méthode transparente de sécurité pour satisfaire un LinkDemand ou appeler une méthode dans un assembly non APTCA déclenche un MethodAccessException; dans les assemblys de niveau 1 le LinkDemand devient une demande complète.In assemblies that usee Level 2 security, attempts by a security transparent method to satisfy a LinkDemand or call a method in a non-APTCA assembly raises a MethodAccessException; in Level 1 assemblies the LinkDemand becomes a full Demand.

Comment corriger les violationsHow to Fix Violations

Pour corriger une violation de cette règle, marquez la méthode d’accès avec le SecurityCriticalAttribute ou SecuritySafeCriticalAttribute d’attribut, ou supprimez le LinkDemand de la méthode accédée.To fix a violation of this rule, mark the accessing method with the SecurityCriticalAttribute or SecuritySafeCriticalAttribute attribute, or remove the LinkDemand from the accessed method.

Quand supprimer les avertissementsWhen to Suppress Warnings

Ne supprimez aucun avertissement de cette règle.Do not suppress a warning from this rule.

ExempleExample

Dans cet exemple, une méthode transparente essaie d’appeler une méthode qui a un LinkDemand.In this example, a transparent method attempts to call a method that has a LinkDemand. Cette règle se déclenche sur ce code.This rule will fire on this code.

using System;
using System.Security.Permissions;


namespace TransparencyWarningsDemo
{

    public class TransparentMethodSatisfiesLinkDemandsClass
    {
        [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
        public void LinkDemandMethod() { }


        public void TransparentMethod()
        {
            // CA2141 violation - transparent method calling a method protected with a link demand.  Any of the
            // following fixes will work here:
            //  1. Make TransparentMethod critical
            //  2. Make TransparentMethod safe critical
            //  3. Remove the LinkDemand from LinkDemandMethod  (In this case, that would be recommended anyway
            //     since it's level 2 -- however you could imagine it in a level 1 assembly)
            LinkDemandMethod();
        }
    }
}