2012-11-21 1 views
4

내 코드 수입이어야한다 호출 : USER32.DLL에서P/선언은 네이티브 메소드 다음의 안전에 중요한

  • DeleteObject, GetFontDataSelectObject gdi32.dll에
  • GetDC에서와 ReleaseDC

전체 및 중간 트러스트 환경에서 코드를 실행하려고합니다. 이러한 가져온 메서드를 중간 트러스트 환경에서 간접적으로 사용할 경우 예외가 발생합니다.

CA5122의 P/선언은 안전에 중요한 안된다 호출 : 나는 코드에 코드 분석을 실행하면

내가 좋아하는 경고를 얻을.

P/Invoke 메서드 'GdiFont.DeleteObject(IntPtr)'은 안전하다고 표시되어 있습니다. P/Invokes는 중요한 코드에 의해서만 호출 될 수 있으므로 이 선언은 보안 위험으로 표시하거나 오도 된 적이 없도록 주석을 완전히 제거해야합니다.

이 경고는 실제로 어떤 의미인지 (누군가 평신도로) 설명 할 수 있습니까?

내부 정적 메서드로 정적 인 SafeNativeMethods 클래스에 이러한 가져 오기를 시도했지만 경고가 사라지지 않습니다.

내가 this article을 읽은 후 나는 그것이 내 코드는 매체 신뢰 환경에서 완전히 사용할 수 없게 싶지 않기 때문에 갈 수있는 올바른 방법 있다는 확신이기 때문에 NativeMethods에 넣어하려고하지 않았다 (나는이 될 것이라고 생각 수입품을 NativeMethods으로 옮긴 결과).

정직하게 말하면, 나는 경고의 실제 의미와 그것을 억제하는 다른 옵션의 결과에 대해 꽤 혼란스러워합니다.

누군가가이 모든 것을 밝힐 수 있습니까?

편집 :

내 코드 대상 .NET 2.0 프레임 워크.

조립 같이 선언

[assembly: AllowPartiallyTrustedCallers] 

방법으로 표시된다 :

[DllImport("gdi32")] 
internal static extern int DeleteObject(HANDLE hObject); 
+0

대상 프레임 워크는 무엇입니까? 이 내용이 http://connect.microsoft.com/VisualStudio/feedback/details/729254/bogus-ca5122-warning-about-p-invoke-declarations-should-not-be-safe-critical에 적용됩니까? 어셈블리의 보안 특성은 무엇입니까? – fsimonazzi

+0

@fsimonazzi 제 질문에 대한 업데이트를 참조하십시오. 불행히도, 제 경우에 버그 리포트가 적용되는지 확신 할 수 없습니다. – Bobrovsky

+0

왜 그것이 적용되지 않는다고 생각합니까? 3.5에 언급 되었기 때문에? 나는 그것이 3.5에 대해 발사해서는 안된다는 주장은 2.0에도 적용된다고 생각한다. – fsimonazzi

답변

관련 문제