IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dotnet Discussion :

Suppression de l'analyse de code CA5122 - PInvoke


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 122
    Par défaut Suppression de l'analyse de code CA5122 - PInvoke
    Bonsoir,

    je n'arrive pas à me sortir des messages que le compilo m'envoie sur un projet compilé en .NET2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    internal sealed class NativeMethods
        {
            private NativeMethods() { }
     
            [SecuritySafeCritical]
            [DllImport("kernel32.dll", EntryPoint = "GetCurrentProcess", CharSet = CharSet.Auto, SetLastError = true)]
            public static extern IntPtr GetCurrentProcessPInvoke();
     
            [SecuritySafeCritical]
            public static IntPtr GetCurrentProcess()
            {
                IntPtr Result = GetCurrentProcessPInvoke();
                return Result;
            }
    }
    j'ai bien regardé la page de M$ :
    https://msdn.microsoft.com/fr-fr/library/dn621099.aspx

    l'erreur CA1903 est liée à mon ajout de [SecuritySafeCritical] qui n'existe que dans .NET 2 SP2.
    CA1903 Utiliser uniquement l'API à partir du Framework cible Le membre 'NativeMethods.GetCurrentProcessPInvoke()' utilise le type 'SecuritySafeCriticalAttribute'. Comme ce type a été introduit dans .NET Framework 2.0 Service Pack 2, qui n'était pas inclus dans le Framework cible du projet, .NET Framework 2.0, il se peut que l'exécution de votre application échoue sur les systèmes où ce Service Pack n'est pas installé. Nolme.Configuration NativeMethdos.cs 16

    l'erreur CA5122 reste un mystère. Et comme je n'aime pas trop faire sauter des warnings à coup de #pragma...
    CA5122 Les déclarations P/Invoke ne doivent pas être sécurisées. La méthode P/Invoke 'NativeMethods.GetCurrentProcessPInvoke()' est marquée comme méthode sécurisée. Les éléments P/Invoke ne pouvant être appelés que par le code critique, vous devez soit marquer cette déclaration comme étant critique de sécurité, soit supprimer complètement son annotation pour éviter toute confusion. Nolme.Configuration NativeMethdos.cs 16

    Une idée ?

    Merci,

    Vincent

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Je pense que tu dois pouvoir résoudre ca en décorant la méthode GetCurrentProcessPInvoke() avec l'attribut SecurityCritical au lieu de SecuritySafeCritical. Seul le wrapper doit être décoré par SecuritySafeCritical.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 122
    Par défaut
    Ca m'a permis de supprimer le CA1903 mais rien pour l'autre

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Et si tu mets GetCurrentProcessPInvoke en private ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 122
    Par défaut
    Idem

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [SecurityCritical]
            [DllImport("kernel32.dll", EntryPoint = "GetCurrentProcess", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern IntPtr GetCurrentProcessPInvoke();
     
            [SecurityCritical]
            public static IntPtr GetCurrentProcess()
            {
                IntPtr Result = GetCurrentProcessPInvoke();
                return Result;
            }

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Pourquoi as-tu enlevé SecuritySafeCritical sur le wrapper ?
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [SecurityCritical]
    [DllImport("kernel32.dll", EntryPoint = "GetCurrentProcess", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern IntPtr GetCurrentProcessPInvoke();
     
    [SecuritySafeCritical]
    public static IntPtr GetCurrentProcess()
    {
        IntPtr Result = GetCurrentProcessPInvoke();
        return Result;
    }

    Je ne peux pas tester plus en profondeur chez moi car je n'ai pas cet avertissement... Si ca ne marche pas, alors je déclare forfait
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Outil d'analyse de code
    Par Bloon dans le forum Outils
    Réponses: 8
    Dernier message: 07/08/2007, 09h04
  2. Analyse de code
    Par ecocentric dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 11/02/2005, 01h09
  3. [WSAD 5 ] - Analyse de code
    Par nicoswiss dans le forum Eclipse Java
    Réponses: 8
    Dernier message: 13/08/2004, 10h21
  4. [ Code ] Analyse de code - Attribut Inutile
    Par geegee dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 19/05/2004, 09h07
  5. Cherche lien info... sur l'analyse du code
    Par Alec6 dans le forum Qualimétrie
    Réponses: 3
    Dernier message: 03/03/2004, 14h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo