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) |