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