私のコードは次のネイティブメソッドをインポートします:
DeleteObject
、GetFontData
およびSelectObject
gdi32.dllからGetDC
およびReleaseDC
user32.dllから
完全および中程度の信頼環境でコードを実行したい(これらのインポートされたメソッドが中程度の信頼環境で間接的に使用される場合に例外がスローされることを除いて、問題ありません)。
コードに対してコード分析を実行すると、次のような警告が表示されます。
CA5122 P/Invoke宣言はセーフクリティカルであってはなりません。
P/Invokeメソッド'
GdiFont.DeleteObject(IntPtr)
'はセーフクリティカルとマークされています。P / Invokesはクリティカルコードによってのみ呼び出される可能性があるため、この宣言はセキュリティクリティカルとしてマークするか、誤解を招くことを避けるためにアノテーションを完全に削除する必要があります。
誰かが私に(素人の言葉で)この警告が本当に何を意味するのか説明してもらえますか?
これらのインポートを内部静的メソッドとして静的クラスに入れてみましSafeNativeMethods
たが、警告が消えることはありません。
この記事NativeMethods
を読んだ後、中程度の信頼の環境でコードを完全に使用できなくしたくないので、それが正しい方法であるかどうかわからないため、それらを入れようとしませんでした(これは移動の結果になると思いますにインポートします)。NativeMethods
正直なところ、私は警告の本当の意味とそれを抑制するためのさまざまなオプションの結果についてかなり混乱しています。
誰かがこれすべてに光を当てることができますか?
編集:
私のコードは.NET2.0フレームワークをターゲットにしています。
アセンブリはでマークされています
[assembly: AllowPartiallyTrustedCallers]
メソッドは次のように宣言されます。
[DllImport("gdi32")]
internal static extern int DeleteObject(HANDLE hObject);