CodeAccessPermission.PermitOnly 方法
防止调用堆栈中处于较高位置的调用方通过调用此方法的代码来访问除当前实例指定的资源外的所有资源。
**命名空间:**System.Security
**程序集:**mscorlib(在 mscorlib.dll 中)
语法
声明
Public Sub PermitOnly
用法
Dim instance As CodeAccessPermission
instance.PermitOnly
public void PermitOnly ()
public:
virtual void PermitOnly () sealed
public final void PermitOnly ()
public final function PermitOnly ()
异常
异常类型 | 条件 |
---|---|
当前框架已经有一个活动的 PermitOnly。 |
备注
PermitOnly 与 Deny 相似,因为两者在堆栈遍历本应成功时都会导致堆栈步失败。两者的差别在于:Deny 指定将导致堆栈遍历失败的权限,而 PermitOnly 仅指定不会导致堆栈遍历失败的权限。
调用此方法以确保您的代码只能用来访问指定的资源。在调用代码返回到它的调用方之前,对 PermitOnly 的调用一直有效。一个帧上只能有一个活动的 PermitOnly。如果试图在帧上存在活动 PermitOnly 时调用 PermitOnly,则会导致 SecurityException。调用 RevertPermitOnly 或 RevertAll 以移除活动的 PermitOnly。
对未授予的权限忽略 PermitOnly,因为对该权限的请求不会成功。但是,如果调用堆栈上的低级代码后来对该权限调用 Demand,则当堆栈遍历到达曾试图调用 PermitOnly 的代码时将引发 SecurityException。这是因为调用 PermitOnly 的代码尚未被授予权限,即使该代码对该权限调用了 PermitOnly。调用堆栈一般表示为缩小,以便调用堆栈中较高的方法可调用调用堆栈中较低的方法。
给继承者的说明 不能重写此方法。
示例
下面的代码示例演示如何使用 PermitOnly 方法来限制对所有资源(当前实例指定的资源除外)的访问。此代码示例是为 RevertAll 方法提供的一个更大示例的一部分。
' Grant access only to OwnClipboard.
Console.WriteLine("Granting permission only for OwnClipboard access.")
clipboardPermission.PermitOnly()
DemandAllClipboardAccess()
' Revert the PermitOnly with a call to RevertPermitOnly.
Console.WriteLine("Reverting the PermitOnly.")
CodeAccessPermission.RevertPermitOnly()
DemandAllClipboardAccess()
// Grant access only to OwnClipboard.
Console.WriteLine("Granting permission only for OwnClipboard access.");
clipboardPermission.PermitOnly();
DemandAllClipboardAccess();
// Revert the PermitOnly with a call to RevertPermitOnly.
Console.WriteLine("Reverting the PermitOnly.");
CodeAccessPermission.RevertPermitOnly();
DemandAllClipboardAccess();
// Grant access only to OwnClipboard.
Console::WriteLine( L"Granting permission only for OwnClipboard access." );
clipboardPermission->PermitOnly();
DemandAllClipboardAccess();
// Revert the PermitOnly with a call to RevertPermitOnly.
Console::WriteLine( L"Reverting the PermitOnly." );
CodeAccessPermission::RevertPermitOnly();
DemandAllClipboardAccess();
平台
Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition
.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求。
版本信息
.NET Framework
受以下版本支持:2.0、1.1、1.0
请参见
参考
CodeAccessPermission 类
CodeAccessPermission 成员
System.Security 命名空间