Udostępnij za pośrednictwem


CA1401: P/Invokes nie powinny być widoczne

TypeName

PInvokesShouldNotBeVisible

CheckId

CA1401

Kategoria

Microsoft.Interoperability

Zmiana kluczowa

Kluczowa

Przyczyna

Metoda publiczna lub chroniona w typie publicznym zawiera atrybut DllImportAttribute (również implementowana przez słowo kluczowe Declare w Visual Basic).

Opis reguły

Metody, które są oznaczone atrybutem DllImportAttribute (lub metody, które zostały zdefiniowane przy użyciu słowa kluczowego Declare w Visual Basic) używają usług wywołania platformowego aby uzyskać dostęp do kodu niezarządzanego.Takie metody nie powinny być udostępniane.Utrzymując te metody jako prywatne lub wewnętrzne, zapewnia się, że biblioteka nie może służyć do naruszenia zabezpieczeń przez zezwolenie wywołującym na dostęp do niezarządzanego interfejsu API, którego nie można byłoby wywołać w przeciwnym wypadku.

Jak naprawić naruszenia

Aby naprawić naruszenie tej zasady, należy zmienić poziom dostępu metody.

Kiedy pominąć ostrzeżenia

Nie należy pomijać ostrzeżenia dotyczącego tej reguły.

Przykład

W poniższym przykładzie deklarowana jest metoda, która narusza regułę.

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);
    }
}