2010-08-07 2 views
4

이 규칙은 P/호출을 공개해서는 안됨을 나타냅니다. 내 질문은 왜? 호출자는 자신의 어셈블리에서 자신의 선언을 쉽게 작성하여 정확히 동일한 호출을 할 수 있습니다. 호출자는 API를 호출하기 위해 C 라이브러리를 작성할 수 있습니다. 이러한 선언을 내부적으로 만들면 어떤 이점, 보안 또는 다른 이점을 얻을 수 있습니까?.NET Framework FxCop 규칙 CA1401 PInvokesShouldNotBeVisible 규칙 -이 규칙은 왜 존재합니까?

답변

9

.NET 보안 모델에서는 어셈블리가 P/Invokes를 수행 할 수 있지만 호출자는 가질 수없는 권한을 가질 수 있습니다. (신뢰할 수있는 어셈블리로 부분적으로 신뢰할 수있는 코드를 실행하여이를 허용하려면 존재하는 AllowPartiallyTrustedCallersAttribute)

작성하는 라이브러리가 안전한 액세스를 제공하기 위해 존재할 때 기본적으로 원하는 것, 제한된 액세스를 어떤 유형의 샌드 박스 응용 프로그램이 임의로 액세스하지 못하게하려는 시스템 기능에 제한적입니다.

또 하나의 주목할 점은 보안뿐만 아니라 공손 성입니다. P/호출은 사실상 안전하지 않습니다. 전화를 잘못하면 모든 종류의 흥미로운 충돌 사고가 발생하여 일반적으로 안락한 .NET 환경에서 실행되지 않을 수 있습니다. 입력 데이터를 Win32API (또는 무엇이든) 형식으로 변환하고 오류 코드를 적절한 .NET 예외로 변환하는 등의 작업과 함께 일부 오류 검사 및 일반 안전 코드를 래핑하는 등의 작업은 간단합니다. 귀하의 도서관의 미래 사용자 인 IMO에게 호의를 베풀어주십시오.

+0

감사합니다. .NET 보안 모델에 대한 설명을 통해 나에게 필요한 것을 해결할 수 있습니다. – anvilis

+0

나는 이것을 위해 투표 하겠지만, 나는 새롭고 명성을 얻지 못했다. – anvilis

+0

@anvilis : 답변을 수락 할 수 있습니다 - 도움이 될 것입니다;) –