SecurityState 类 
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供一个基类,用于从 AppDomainManager 对象中请求操作的安全状态。
public ref class SecurityState abstractpublic abstract class SecurityState[System.Security.SecurityCritical]
public abstract class SecurityStatetype SecurityState = class[<System.Security.SecurityCritical>]
type SecurityState = classPublic MustInherit Class SecurityState- 继承
- 
				SecurityState
- 派生
- 属性
示例
以下示例演示如何重写 SecurityState 类。
[SecurityCritical]  
public enum WebcamSecurityOptions
{
    SafeAccess,  
    FullAccess  
}  
[SecurityCritical]  
public class WebcamSecurityState : SecurityState  
{  
    public WebcamSecurityState(string description, WebcamSecurityOptions options)  
    {  
        Options = options;  
        Description = description;  
    }  
    public WebcamSecurityOptions Options { get; set; }  
    public string Description { get; set; }  
    public override void EnsureState()  
    {  
        if (!IsStateAvailable())  
            throw new ApplicationException("WebcamSecurityState not available");  
    }  
}    
注解
必须从此类继承才能提供一个类,该类包含指定要执行的安全敏感操作的属性。 
              SecurityState从派生类实例化的对象将传递给 方法,AppDomainManager.CheckSecuritySettings以确定主机是否允许执行该操作。 方法的默认实现 CheckSecuritySettings 始终返回 false。  必须重写 方法才能检测允许的操作。
例如,如果要在库代码中访问 Web 相机,请创建 一个 WebcamSecurityState 对象并调用 EnsureState 方法,以确定主机是否允许访问 Web 相机,如以下示例所示。   (可以在“示例”部分中找到 的代码 WebcamSecurityState 。) 
var securityState = new WebcamSecurityState("Safe access to Webcam", WebcamSecurityOptions.SafeAccess);  
try  
{  
    securityState.EnsureState();  
    // Allocate memory.  
}  
catch (ApplicationException e)  
{  
    // Handle any exception that is thrown.  
    System.Diagnostics.Debug.WriteLine(e.Message);  
}  
若要处理 调用,AppDomainManager必须通过方法的AppDomainManager.CheckSecuritySettings重写来识别 WebcamSecurityState ,如以下示例所示。
[SecurityCritical]  
public override bool CheckSecuritySettings(System.Security.SecurityState securityState)  
{  
    switch (securityState.ToString())  
    {  
        case "WebcamSecurityState":  
        {  
            if ((securityState as WebcamSecurityState).Options == WebcamSecurityOptions.SafeAccess)  
                return PromptUser((securityState as WebcamSecurityState).Description);  
            return false;  
        }  
    }  
    return false;  
}  
private bool PromptUser(string text)  
{  
    // Replace the OpenFileDialog with a custom user prompt.  
    OpenFileDialog o = new OpenFileDialog();  
    o.Title = text;  
    if (o.ShowDialog() == DialogResult.OK)  
        return true;  
    else  
        return false;  
}   
构造函数
| SecurityState() | 初始化 SecurityState 类的新实例。 | 
方法
| EnsureState() | 在派生类中重写时,确保由 SecurityState 表示的状态在宿主上可用。 | 
| Equals(Object) | 确定指定对象是否等于当前对象。(继承自 Object) | 
| GetHashCode() | 作为默认哈希函数。(继承自 Object) | 
| GetType() | 获取当前实例的 Type。(继承自 Object) | 
| IsStateAvailable() | 获取一个值,该值指示 SecurityState 类的此实现的状态是否在当前宿主上可用。 | 
| MemberwiseClone() | 创建当前 Object 的浅表副本。(继承自 Object) | 
| ToString() | 返回表示当前对象的字符串。(继承自 Object) |