This documentation is archived and is not being maintained.

CodeAccessPermission Class

Defines the underlying structure of all code access permissions.

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

'Declaration
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, ControlEvidence := True,  _
	ControlPolicy := True)> _
Public MustInherit Class CodeAccessPermission _
	Implements IPermission, ISecurityEncodable, IStackWalk
'Usage
Dim instance As CodeAccessPermission

Code access permissions use a stack walk to ensure that all callers of the code have been granted a permission. If a permission object is Nothing, it is handled the same as a permission object with the state PermissionState.None.

The call stack is typically represented as growing down, so that methods higher in the call stack call methods lower in the call stack.

Inheritors of the CodeAccessPermission class must be granted full trust to function correctly as permissions extending the security infrastructure. To determine that the inheritors are fully trusted, CodeAccessPermission issues an InheritanceDemand for ControlEvidence = true and ControlPolicy = true.

For more information on inheritance demands, see Inheritance Demands.

Notes to Inheritors:

When you inherit from CodeAccessPermission, you must also implement the IUnrestrictedPermission interface.

The following CodeAccessPermission members must be overridden: Copy, Intersect, IsSubsetOf, ToXml, FromXml, and Union.

You must also define a constructor that takes a PermissionState as its only parameter.

You must apply the SerializableAttribute attribute to a class that inherits from CodeAccessPermission.

The following code example shows a permission derived from the CodeAccessPermission class.

' This custom permission is intended only for the purposes of illustration. 
' The following code shows how to create a custom permission that inherits 
' from CodeAccessPermission. The code implements all required overrides. 
' A wildcard character ('*') is implemented for the Name property. 
Imports System
Imports System.Security
Imports System.Security.Permissions
Imports System.IO
Imports System.Security.Policy
Imports System.Collections
Imports Microsoft.VisualBasic

<assembly: System.Reflection.AssemblyKeyFile("Key.snk")>

<assembly: System.Security.AllowPartiallyTrustedCallersAttribute()>
Namespace MyPermission

    <Serializable()> _
                   Public NotInheritable Class NameIdPermission
        Inherits CodeAccessPermission
        Implements IUnrestrictedPermission
        Private m_Name As String 
        Private m_Unrestricted As Boolean 


        Public Sub New(ByVal name As String)
            m_name = name
        End Sub 'New 


        Public Sub New(ByVal state As PermissionState)
            If state = PermissionState.None Then
                m_name = "" 
            ElseIf state = PermissionState.Unrestricted Then 
                Throw New ArgumentException("Unrestricted state is not allowed for identity permissions.")
            Else 
                Throw New ArgumentException("Invalid permission state.")
            End If 
        End Sub 'New  

        Public Property Name() As String 
            Get 
                Return m_name
            End Get 
            Set(ByVal Value As String)
                m_name = Value
            End Set 
        End Property 

        Public Overrides Function Copy() As IPermission
            Dim name As String
            name = m_name
            Return New NameIdPermission(name)
        End Function 'Copy

        Public Function IsUnrestricted() As Boolean Implements IUnrestrictedPermission.IsUnrestricted
            ' Always false, unrestricted state is not allowed. 
            Return m_Unrestricted
        End Function 
        Private Function VerifyType(ByVal target As IPermission) As Boolean 
            Return TypeOf target Is NameIdPermission
        End Function 'VerifyType

        Public Overrides Function IsSubsetOf(ByVal target As IPermission) As Boolean

#If (Debug) Then

            Console.WriteLine("************* Entering IsSubsetOf *********************")
#End If 
            If target Is Nothing Then
                Console.WriteLine("IsSubsetOf: target == null")
                Return False 
            End If
#If (Debug) Then
            Console.WriteLine(("This is = " + CType(Me, NameIdPermission).Name))
            Console.WriteLine(("Target is " + CType(target, NameIdPermission).m_name))
#End If 
            Try 
                Dim operand As NameIdPermission = CType(target, NameIdPermission)

                ' The following check for unrestricted permission is only included as an example for 
                ' permissions that allow the unrestricted state. It is of no value for this permission. 
                If True = operand.m_Unrestricted Then 
                    Return True 
                ElseIf True = Me.m_Unrestricted Then 
                    Return False 
                End If 

                If Not (Me.m_name Is Nothing) Then 
                    If operand.m_name Is Nothing Then 
                        Return False 
                    End If 
                    If Me.m_name = "" Then 
                        Return True 
                    End If 
                End If 
                If Me.m_name.Equals(operand.m_name) Then 
                    Return True 
                Else 
                    ' Check for wild card character '*'. 
                    Dim i As Integer = operand.m_name.LastIndexOf("*")

                    If i > 0 Then 
                        Dim prefix As String = operand.m_name.Substring(0, i)

                        If Me.m_name.StartsWith(prefix) Then 
                            Return True 
                        End If 
                    End If 
                End If 

                Return False 
            Catch 
                Throw New ArgumentException(String.Format("Argument_WrongType", Me.GetType().FullName))
            End Try 
        End Function 

        Public Overrides Function Intersect(ByVal target As IPermission) As IPermission
            Console.WriteLine("************* Entering Intersect *********************")
            If target Is Nothing Then 
                Return Nothing 
            End If
#If (Debug) Then

            Console.WriteLine(("This is = " + CType(Me, NameIdPermission).Name))
            Console.WriteLine(("Target is " + CType(target, NameIdPermission).m_name))
#End If 
            If Not VerifyType(target) Then 
                Throw New ArgumentException(String.Format("Argument is wrong type.", Me.GetType().FullName))
            End If 

            Dim operand As NameIdPermission = CType(target, NameIdPermission)

            If operand.IsSubsetOf(Me) Then 
                Return operand.Copy()
            ElseIf Me.IsSubsetOf(operand) Then 
                Return Me.Copy()
            Else 
                Return Nothing 
            End If 
        End Function 'Intersect

        Public Overrides Function Union(ByVal target As IPermission) As IPermission
#If (Debug) Then

            Console.WriteLine("************* Entering Union *********************")
#End If 
            If target Is Nothing Then 
                Return Me 
            End If
#If (Debug) Then
            Console.WriteLine(("This is = " + CType(Me, NameIdPermission).Name))
            Console.WriteLine(("Target is " + CType(target, NameIdPermission).m_name))
#End If 
            If Not VerifyType(target) Then 
                Throw New ArgumentException(String.Format("Argument_WrongType", Me.GetType().FullName))
            End If 

            Dim operand As NameIdPermission = CType(target, NameIdPermission)

            If operand.IsSubsetOf(Me) Then 
                Return Me.Copy()
            ElseIf Me.IsSubsetOf(operand) Then 
                Return operand.Copy()
            Else 
                Return Nothing 
            End If 
        End Function 'Union

        Public Overrides Sub FromXml(ByVal e As SecurityElement)
            ' The following code for unrestricted permission is only included as an example for 
            ' permissions that allow the unrestricted state. It is of no value for this permission. 
            Dim elUnrestricted As String = e.Attribute("Unrestricted")
            If Nothing <> elUnrestricted Then
                m_Unrestricted = Boolean.Parse(elUnrestricted)
                Return 
            End If 

            Dim elName As String = e.Attribute("Name")
            m_name = IIf(elName Is Nothing, Nothing, elName)
        End Sub 'FromXml

        Public Overrides Function ToXml() As SecurityElement
            ' Use the SecurityElement class to encode the permission to XML. 
            Dim esd As New SecurityElement("IPermission")

            Dim name As String = GetType(NameIdPermission).AssemblyQualifiedName
            esd.AddAttribute("class", name)
            esd.AddAttribute("version", "1.0")

            ' The following code for unrestricted permission is only included as an example for 
            ' permissions that allow the unrestricted state. It is of no value for this permission. 
            If m_Unrestricted Then
                esd.AddAttribute("Unrestricted", True.ToString())
            End If 
            If Not (m_Name Is Nothing) Then
                esd.AddAttribute("Name", m_Name)
            End If 
            Return esd
        End Function 'ToXml
    End Class ' NameIdPermission 
End Namespace

System.Object
  System.Security.CodeAccessPermission
    System.Configuration.ConfigurationPermission
    System.Data.Common.DBDataPermission
    System.Data.OracleClient.OraclePermission
    System.Drawing.Printing.PrintingPermission
    System.Messaging.MessageQueuePermission
    System.Net.DnsPermission
    System.Net.Mail.SmtpPermission
    System.Net.NetworkInformation.NetworkInformationPermission
    System.Net.PeerToPeer.Collaboration.PeerCollaborationPermission
    System.Net.PeerToPeer.PnrpPermission
    System.Net.SocketPermission
    System.Net.WebPermission
    System.Security.Permissions.DataProtectionPermission
    System.Security.Permissions.EnvironmentPermission
    System.Security.Permissions.FileDialogPermission
    System.Security.Permissions.FileIOPermission
    System.Security.Permissions.GacIdentityPermission
    System.Security.Permissions.IsolatedStoragePermission
    System.Security.Permissions.KeyContainerPermission
    System.Security.Permissions.MediaPermission
    System.Security.Permissions.PublisherIdentityPermission
    System.Security.Permissions.ReflectionPermission
    System.Security.Permissions.RegistryPermission
    System.Security.Permissions.ResourcePermissionBase
    System.Security.Permissions.SecurityPermission
    System.Security.Permissions.SiteIdentityPermission
    System.Security.Permissions.StorePermission
    System.Security.Permissions.StrongNameIdentityPermission
    System.Security.Permissions.UIPermission
    System.Security.Permissions.UrlIdentityPermission
    System.Security.Permissions.WebBrowserPermission
    System.Security.Permissions.ZoneIdentityPermission
    System.Transactions.DistributedTransactionPermission
    System.Web.AspNetHostingPermission

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 XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

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, 3.0, 2.0, 1.1, 1.0
Show: