Поделиться через


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