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)

適用於