SecurityState Class

Updated: July 2008

Provides a base class for requesting the security status of an action from the AppDomainManager object.

Namespace:  System.Security
Assembly:  mscorlib (in mscorlib.dll)

[PermissionSetAttribute(SecurityAction.LinkDemand, Unrestricted = true)]
[PermissionSetAttribute(SecurityAction.InheritanceDemand, Unrestricted = true)]
public abstract class SecurityState

You must inherit from this class to provide a class that includes a property that specifies the security-sensitive action to be performed. The SecurityState object that is instantiated from the derived class is passed to the AppDomainManager.CheckSecuritySettings method to determine whether the host allows that action to be performed. The default implementation of the CheckSecuritySettings method always returns false. The method must be overridden to detect the actions that are allowed.

For example, if you want to access a Web camera in your library code, you would create a WebcamSecurityState object and call the EnsureState method to determine whether the host allows Web camera access, as shown in the following example. (You can find the code for WebcamSecurityState in the "Example" section.)

WebcamSecurityState 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);
}

To process the call the AppDomainManager must be made aware of WebcamSecurityState through an override of the AppDomainManager.CheckSecuritySettings method, as shown in the following example.

[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;
}

The following example shows how to override the SecurityState class.

[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");
    }
 }

System.Object
  System.Security.SecurityState

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5 SP1, 3.0 SP2, 2.0 SP2

Date

History

Reason

July 2008

Added topic for new class.

SP1 feature change.

Was this page helpful?
(1500 characters remaining)
Thank you for your feedback

Community Additions

ADD
Show:
© 2014 Microsoft