CodeAccessPermission.PermitOnly メソッド

定義

呼び出し履歴の上位の呼び出し元がこのメソッドを呼び出すコードを使用して、現在のインスタンスで指定されているリソースを除くすべてのリソースにアクセスできないようにします。

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

実装

例外

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

注釈

Important

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

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

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

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

注意 (継承者)

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

適用対象