Partager via


CA1401 : Les P/Invoke ne doivent pas être visibles

TypeName

PInvokesShouldNotBeVisible

CheckId

CA1401

Catégorie

Microsoft.Interoperability

Modification avec rupture

Oui

Cause

Une méthode publique ou protégée dans un type public a l'attribut System.Runtime.InteropServices.DllImportAttribute (également implémenté par le mot clé Declare en Visual Basic).

Description de la règle

Les méthodes marquées avec l'attribut DllImportAttribute (ou les méthodes définies à l'aide du mot clé Declare en Visual Basic) utilisent les services d'appel de code non managé pour accéder à un code non managé. De telles méthodes ne doivent pas être exposées. Préserver le caractère privé ou interne de ces méthodes garantit que votre bibliothèque ne peut pas être utilisée pour créer une faille dans la sécurité en donnant aux appelants accès à des API non managées auxquelles ils n'auraient pas eu accès autrement.

Comment corriger les violations

Pour corriger une violation de cette règle, modifiez le niveau d'accès de la méthode.

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle.

Exemple

L'exemple suivant déclare une méthode qui ne respecte pas cette règle.

Imports System

NameSpace MSInternalLibrary

' Violates rule: PInvokesShouldNotBeVisible.
Public Class NativeMethods
    Public Declare Function RemoveDirectory Lib "kernel32"( _
        ByVal Name As String) As Boolean
End Class

End NameSpace 
using System;
using System.Runtime.InteropServices;

namespace InteroperabilityLibrary
{
    // Violates rule: PInvokesShouldNotBeVisible.
    public class NativeMethods
    {
        [DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
        public static extern bool RemoveDirectory(string name);
    }
}