次の方法で共有


CodeAccessPermission.PermitOnly メソッド

定義

呼び出し履歴内の上位の呼び出し元が、このメソッドを呼び出すコードでは一切リソースにアクセスできないようにします。ただし、現在のインスタンスで指定されているリソースは例外です。

public:
 virtual void PermitOnly();
public void PermitOnly ();
abstract member PermitOnly : unit -> unit
override this.PermitOnly : unit -> unit
Public Sub PermitOnly ()

実装

例外

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

注釈

重要

メソッドは PermitOnly 、完全に信頼されたコードによる偶発的なアクセスからリソースを保護するためにのみ使用する必要があります。 信頼されていないコードによる意図的な誤用からリソースを保護するために使用しないでください。 たとえば、メソッドAがアクセス許可に対して をPermitOnly発行し、メソッド Bを呼び出した場合、 メソッドBは をAssert発行することによって を明示的にオーバーライドPermitOnlyできます。 呼び出されたメソッドは、スタック内で常に高くなります。 そのため、メソッド B が保護されたリソースへのアクセスを試みると、メソッドが直接呼び出し元であるため B 、セキュリティ システムはアクセス許可のチェックを開始し、スタックを下に移動してスタック内に存在しない Deny か、または PermitOnly それ以下であることを確認します。 リソースにアクセスしようとしている メソッドは、 メソッド Bを使用してスタック ウォークを Assert 直ちに停止できます。 その場合、 PermitOnly メソッド (呼び出し元のメソッド A ) によってスタックに配置された が検出されることはありません。

PermitOnly は に Deny似ていますが、それ以外の場合は成功すると、両方のスタック ウォークが失敗します。 違いは、 Deny スタック ウォークが失敗する原因となるアクセス許可を指定するが PermitOnly 、スタック ウォークの失敗を引き起こさない唯一のアクセス許可を指定することです。

このメソッドを呼び出して、コードを使用して、指定したリソースにのみアクセスできるようにします。 の PermitOnly 呼び出しは、呼び出し元のコードが呼び出し元に戻るまで有効です。 1 つのフレームでアクティブにできるのは 1 つだけ PermitOnly です。 フレームにアクティブPermitOnlyな が存在する場合に を呼び出PermitOnlyそうとすると、 が発生しますSecurityException。 または RevertAll を呼び出RevertPermitOnlyして、アクティブPermitOnlyな を削除します。

PermitOnly は、そのアクセス許可の要求が成功しないため、許可されていない場合は無視されます。 ただし、呼び出し履歴の下位のコードがそのアクセス許可を後で呼び出す場合、SecurityExceptionスタック ウォークが を呼び出PermitOnlyDemandそうとしたコードに到達すると、 がスローされます。 これは、 を呼び出 PermitOnly したコードには、そのアクセス許可を呼び出 PermitOnly してもアクセス許可が付与されていないためです。 呼び出し履歴は、通常は減少していると表されるため、呼び出し履歴の上位のメソッドは呼び出し履歴内のメソッドを低く呼び出します。

注意 (継承者)

このメソッドをオーバーライドすることはできません。

適用対象