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 powodująca niezgodność lub niezgodność | Kluczowa |
Domyślnie włączone na platformie .NET 9 | Jako sugestia |
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ń, zezwalając obiektom wywołującym na dostęp do niezarządzanych interfejsów API, których nie można 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