CA1401: методы P/Invoke не должны быть видимыми
TypeName |
PInvokesShouldNotBeVisible |
CheckId |
CA1401 |
Категория |
Microsoft.Interoperability |
Критическое изменение |
Критическое изменение |
Причина
Открытый или защищенный метод в открытом типе имеет атрибут DllImportAttribute (также реализуется ключевым словом Declare в Visual Basic).
Описание правила
Методы, помеченные атрибутом DllImportAttribute (или методы, определенные с помощью ключевого слова Declare в Visual Basic) используют службы платформенных вызовов для доступа к неуправляемому коду.Такие методы не следует делать видимыми.Сохраняя эти методы закрытыми или внутренними, мы гарантируем, что наша библиотека не может использоваться для прорыва безопасности путем предоставления вызывающим объектам доступа к неуправляемым интерфейсам API, которые в противном случае было бы невозможно вызвать.
Устранение нарушений
Чтобы устранить нарушение этого правила, измените уровень доступа метода.
Отключение предупреждений
Для этого правила отключать вывод предупреждений не следует.
Пример
В следующем примере объявляется метод, нарушающий это правило.
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);
}
}