CodeAccessPermission.PermitOnly メソッド


呼び出し履歴内の上位の呼び出し元が、このメソッドを呼び出すコードでは一切リソースにアクセスできないようにします。ただし、現在のインスタンスで指定されているリソースは例外です。Prevents callers higher in the call stack from using the code that calls this method to access all resources except for the resource specified by the current instance.

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




現在のフレームにはアクティブな PermitOnly() が既に存在しています。There is already an active PermitOnly() for the current frame.



メソッドを使用するのは、 PermitOnly 完全に信頼されているコードによる偶発的なアクセスからリソースを保護する場合のみにしてください。The PermitOnly method should be used only to protect resources from accidental access by fully trusted code. 信頼されていないコードによる意図的誤用からリソースを保護するためには使用しないでください。It should not be used to protect resources from intentional misuse by untrusted code. たとえば、メソッド A PermitOnly がアクセス許可に対してを発行してからメソッドを呼び出す場合、 B メソッド B はを発行してをオーバーライド overtly ことができ PermitOnly Assert ます。For example, if method A issues a PermitOnly for a permission and then calls method B, method B can overtly override the PermitOnly by issuing an Assert. 呼び出されたメソッドは常にスタック内で上位になります。The called method is always higher in the stack. したがって、メソッド B が保護されたリソースにアクセスしようとすると、セキュリティシステムは、メソッドが直前の呼び出し元であるため、そのリソースを使用してアクセス許可の確認を開始し B ます。その後、スタック内にスタックがあるかどうかを確認するためにスタックをステップダウンし Deny PermitOnly ます。Therefore, if method B tries to access a protected resource, the security system begins checking for permissions with it because method B is the immediate caller, and then walks down the stack to confirm that there is no Deny or PermitOnly lower in the stack. Bリソースにアクセスしようとしているメソッドは、メソッドを使用してすぐにスタックウォークを停止できます AssertMethod B, which is trying to access the resource, can stop the stack walk immediately by using the Assert method. この場合、 PermitOnly メソッドによってスタックに配置されたが A 検出されることはありません。In that case, the PermitOnly placed on the stack by method A (the calling method) is never discovered.

PermitOnly はと似 Deny ていますが、それ以外の場合は成功した場合にスタックウォークが失敗します。PermitOnly is similar to Deny, in that both cause stack walks to fail when they would otherwise succeed. 違いは、が Deny スタックウォークを失敗させるアクセス許可を指定することですが、 PermitOnly スタックウォークが失敗することのない唯一のアクセス許可を指定することです。The difference is that Deny specifies permissions that will cause the stack walk to fail, but PermitOnly specifies the only permissions that do not cause the stack walk to fail.

コードを使用して、指定したリソースにのみアクセスできるようにするには、このメソッドを呼び出します。Call this method to ensure that your code can be used to access only the specified resources. の呼び出しは、呼び出し元のコードが呼び出し PermitOnly 元に戻るまで有効です。The call to PermitOnly is effective until the calling code returns to its caller. 1つの PermitOnly フレームでアクティブにできるのは1つだけです。Only one PermitOnly can be active on a frame. フレームにアクティブなが存在するときにを呼び出そうとすると PermitOnly PermitOnly 、が発生 SecurityException します。An attempt to call PermitOnly when an active PermitOnly exists on the frame results in a SecurityException. アクティブなを RevertPermitOnly 削除するには、または RevertAll を呼び出し PermitOnly ます。Call RevertPermitOnly or RevertAll to remove an active PermitOnly.

PermitOnly は、許可されていないアクセス許可の要求が成功しないため、このアクセス許可は無視されます。PermitOnly is ignored for a permission not granted because a demand for that permission will not succeed. ただし、後で呼び出し履歴のコードが Demand そのアクセス許可を呼び出すと、 SecurityException スタックウォークがを呼び出そうとしたコードに到達すると、がスローされ PermitOnly ます。However, if code lower on the call stack later calls Demand for that permission, a SecurityException is thrown when the stack walk reaches the code that tried to call PermitOnly. これは、呼び出されたコードに、そのアクセス許可に対してが呼び出されてい PermitOnly てもアクセス許可が付与されていないためです PermitOnlyThis is because the code that called PermitOnly has not been granted the permission, even though it called PermitOnly for that permission. 呼び出し履歴は、通常、コールスタックの上位にあるメソッドが呼び出し履歴の下位にあるメソッドを呼び出すように、拡張ダウンとして表されます。The call stack is typically represented as growing down, so that methods higher in the call stack call methods lower in the call stack.

注意 (継承者)

このメソッドをオーバーライドすることはできません。You cannot override this method.