4

重複の可能性:
クラス NativeMethods は .NET で特別に処理されますか?

私は、いくつかの機能のためにいくつかのアンマネージ C++ コードをピンボークする C# プロジェクトに取り組んでいます。私は fxCop について知り、アンマネージ ライブラリの関数を含めた方法について不平を言いました。

ここで説明されている NativeMethods クラスのいずれかを使用することをお勧めします。

http://msdn.microsoft.com/en-us/library/ms182161%28v=vs.80%29.aspx

私はそれを読みましたが、それが正確に何をするのか、それを使用することの利点を理解しているとは言えません. 「このクラスは、アンマネージ コードのパーミッションのスタック ウォークを抑制しません」の意味を誰かが説明してくれたら、本当にうれしいです。および「このクラスは、アンマネージ コードのアクセス許可のスタック ウォークを抑制します。」

編集:私が本当に疑問に思っているのは、それが私のコードにどのように影響するかです。MSDN の内容を読んだことがあります。明らかに、一部の人にとっては十分な知識ですが、高すぎて理解できません。そのため、いくつかの詳細を求めました。

4

1 に答える 1

1

この記事の Visual Studio 2012 バージョンには、より多くの説明が含まれています。

http://msdn.microsoft.com/en-us/library/ms182161(v=vs.110).aspx

この規則違反を修正するには、メソッドを適切な NativeMethods クラスに移動します。ほとんどのアプリケーションでは、P/Invokes を NativeMethods という名前の新しいクラスに移動するだけで十分です。

ただし、他のアプリケーションで使用するライブラリを開発している場合は、SafeNativeMethods および UnsafeNativeMethods と呼ばれる他の 2 つのクラスを定義することを検討する必要があります。これらのクラスは NativeMethods クラスに似ています。ただし、これらは SuppressUnmanagedCodeSecurityAttribute という特別な属性を使用してマークされます。この属性が適用されると、ランタイムは完全なスタック ウォークを実行せず、すべての呼び出し元が UnmanagedCode アクセス許可を持っていることを確認します。ランタイムは通常、起動時にこのアクセス許可を確認します。チェックが実行されないため、これらのアンマネージ メソッドの呼び出しのパフォーマンスが大幅に向上します。また、アクセス許可が制限されているコードがこれらのメソッドを呼び出すこともできます。

ただし、この属性は細心の注意を払って使用する必要があります。正しく実装されていない場合、セキュリティに深刻な影響を与える可能性があります..

メソッドの実装方法については、NativeMethods の例、SafeNativeMethods の例、および UnsafeNativeMethods の例を参照してください。

于 2012-10-05T09:07:39.450 に答える