Udostępnij za pośrednictwem


CA1401: P/Invokes nie powinny być widoczne

Właściwości Wartość
Identyfikator reguły CA1401
Tytuł Elementy P/Invoke nie powinny być widoczne
Kategoria Współdziałanie
Poprawka łamiąca lub nienaruszająca Przełomowe
Domyślnie włączone na platformie .NET 10 Jako sugestia
Zastosowane języki C# i Visual Basic

Przyczyna

Publiczna lub chroniona metoda w typie publicznym ma System.Runtime.InteropServices.DllImportAttribute atrybut (implementowany również przez Declare słowo kluczowe w Visual Basic).

Opis reguły

Metody oznaczone atrybutem DllImportAttribute (lub metodami zdefiniowanymi za pomocą słowa kluczowego Declare w Visual Basic) używają usług wywołania platformy w celu uzyskania dostępu do kodu niezarządzanych. Takie metody nie powinny być udostępniane. Zachowując te metody prywatne lub wewnętrzne, upewnij się, że biblioteka nie może być używana do naruszenia zabezpieczeń, pozwalając osobom wywołującym na dostęp do niezajrządzanych interfejsów API, których nie mogą wywołać w inny sposób.

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły, zmień poziom dostępu metody.

Kiedy pomijać ostrzeżenia

Nie pomijaj ostrzeżeń dla tej reguły.

Przykład

Poniższy przykład deklaruje metodę, która narusza tę regułę.

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

Namespace ca1401

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

End Namespace