SecurityState 类

定义

提供一个基类,用于从 AppDomainManager 对象中请求操作的安全状态。

public ref class SecurityState abstract
public abstract class SecurityState
[System.Security.SecurityCritical]
public abstract class SecurityState
type SecurityState = class
[<System.Security.SecurityCritical>]
type SecurityState = class
Public 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)

适用于