次の方法で共有


CodeAccessPermission.Assert メソッド

アクセス許可要求によって保護されているリソースへのアクセス許可が、スタックの上位にある呼び出し元に与えられていない場合でも、呼び出し元コードが、このメソッドを呼び出すコードを通じてリソースにアクセスできるように宣言します。 Assert を使用すると、セキュリティ上の問題が発生することがあります。

Public Overridable Sub Assert() Implements IStackWalk.Assert
[C#]
public virtual void Assert();
[C++]
public: virtual void Assert();
[JScript]
public function Assert();

実装

IStackWalk.Assert

例外

例外の種類 条件
SecurityException 呼び出しコードに SecurityPermissionFlag.Assertion が指定されていません。

または

現在のフレームに既にアクティブな Assert が存在しています。

解説

コール スタック内で上位にあるメソッドが下位にあるメソッドを呼び出すことができるというように、通常コール スタックは、下方向に影響力を持つものとして表現されます。 Assert を呼び出すと、コール スタックの下位から始まるスタック ウォークが、このメソッドを呼び出すコードを超えて、コール スタックの上位に進まないようにすることができます。したがって、コール スタックの上位の呼び出し元は、リソースにアクセスするために必要なアクセス許可がなくても、必要なアクセス許可でこのメソッドを呼び出すコードを通じて、そのリソースにアクセスできます。アサーションは、 Assert を呼び出すコードが、アサート対象のアクセス許可に関するセキュリティ チェックに合格している場合にだけ有効です。

Assert の呼び出しは、呼び出しコードがその呼び出し元に返されるまで有効です。フレームあたり 1 つの Assert だけをアクティブにできます。フレームにアクティブな Assert が存在する場合に Assert を呼び出そうとすると、 SecurityException が発生します。アクティブな Assert を削除するには、 RevertAssert または RevertAll を呼び出します。

与えられていないアクセス許可を要求しても失敗するため、そのようなアクセス許可に対して Assert を呼び出しても無視されます。しかし、コール スタック内の下位にあるコードがそのアクセス許可に対して Demand を呼び出すと、 Assert の呼び出しを試行するコードにスタック ウォークが達したときに、 SecurityException がスローされます。これは、コードが Assert を呼び出してアクセス許可をアサートしようとしても、 Assert を呼び出したコードにそのアクセス許可が与えられていないために発生します。

注意    Assert を呼び出すと、呼び出しチェインのすべてのコードに、指定されたリソースへのアクセス許可が与えられている必要があるという要件がなくなります。そのため、このメソッドの使い方を誤るとセキュリティ上の問題が発生する可能性があります。したがって、使用する場合は十分に注意してください。

継承時の注意: このメソッドはオーバーライドできません。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, Common Language Infrastructure (CLI) Standard

.NET Framework セキュリティ:

参照

CodeAccessPermission クラス | CodeAccessPermission メンバ | System.Security 名前空間 | Assert | セキュリティ チェックのオーバーライド