SecurityState 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供一个基类,用于从 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) |