다음을 통해 공유


P/Invoke는 노출되지 않아야 합니다.

업데이트: 2007년 11월

TypeName

PInvokesShouldNotBeVisible

CheckId

CA1401

범주

Microsoft.Interoperability

변경 수준

주요 변경

원인

public 형식의 public 또는 protected 메서드에 System.Runtime.InteropServices.DllImportAttribute 특성이 있습니다. Visual Basic에서는 Declare 키워드로 구현됩니다.

규칙 설명

DllImportAttribute 특성(또는 Visual Basic에서는 Declare 키워드를 사용하여 정의된 메서드)으로 표시된 메서드는 플랫폼 호출 서비스를 사용하여 비관리 코드에 액세스합니다. 이러한 메서드는 노출되지 않아야 합니다. 이러한 메서드를 private 또는 internal로 유지하면 호출자가 다른 방식으로는 호출할 수 없는 관리되지 않는 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);
    }
}