CodeAccessPermission クラス
アセンブリ: mscorlib (mscorlib.dll 内)

<SerializableAttribute> _ <ComVisibleAttribute(True)> _ Public MustInherit Class CodeAccessPermission Implements IPermission, ISecurityEncodable, IStackWalk
[SerializableAttribute] [ComVisibleAttribute(true)] public abstract class CodeAccessPermission : IPermission, ISecurityEncodable, IStackWalk
[SerializableAttribute] [ComVisibleAttribute(true)] public ref class CodeAccessPermission abstract : IPermission, ISecurityEncodable, IStackWalk

コード アクセス許可は、スタック ウォークを使用し、コードを呼び出したすべての呼び出し元にアクセス許可が与えられるようにします。アクセス許可オブジェクトが null 参照 (Visual Basic では Nothing) の場合、そのオブジェクトは、状態が PermissionState.None のアクセス許可オブジェクトと同じように処理されます。
コール スタック内で上位にあるメソッドが下位にあるメソッドを呼び出すことができるように、通常コール スタックは、下方向に影響力を持つものとして表現されます。
CodeAccessPermission クラスの継承クラスは、セキュリティ インフラストラクチャを拡張するアクセス許可として正しく機能するために、完全信頼が与えられている必要があります。継承クラスに完全信頼が与えられるように指定するために、CodeAccessPermission は ControlEvidence = true および ControlPolicy = true の InheritanceDemand を発行します。
継承確認要求の詳細については、「継承確認要求」を参照してください。
継承時の注意 CodeAccessPermission から継承する場合は、IUnrestrictedPermission インターフェイスも実装する必要があります。 CodeAccessPermission の Copy、Intersect、IsSubsetOf、ToXml、FromXml、および Union の各メンバをオーバーライドする必要があります。 唯一のパラメータとして PermissionState をとるコンストラクタも定義する必要があります。 CodeAccessPermission から継承するクラスに SerializableAttribute 属性を適用する必要があります。
CodeAccessPermission クラスから派生したアクセス許可のコード例を次に示します。
' 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 'IsUnrestricted 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 'IsSubsetOf 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 Namespace
//#define debug // 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. using System; using System.Security; using System.Security.Permissions; using System.IO; using System.Security.Policy; using System.Collections; using System.Text; [assembly:System.Reflection.AssemblyKeyFile("Key.snk")] [assembly:System.Security.AllowPartiallyTrustedCallersAttribute()] namespace MyPermission { [Serializable()] sealed public class NameIdPermission : CodeAccessPermission, IUnrestrictedPermission { private String m_Name; private bool m_Unrestricted; public NameIdPermission(String name) { m_Name = name; } public NameIdPermission(PermissionState state) { if (state == PermissionState.None) { m_Name = ""; } else if (state == PermissionState.Unrestricted) { throw new ArgumentException("Unrestricted state is not allowed for identity permissions."); } else throw new ArgumentException("Invalid permission state."); } public String Name { set{m_Name = value;} get{ return m_Name;} } public override IPermission Copy() { string name = m_Name; return new NameIdPermission( name ); } public bool IsUnrestricted() { // Always false, unrestricted state is not allowed. return m_Unrestricted; } private bool VerifyType(IPermission target) { return (target is NameIdPermission); } public override bool IsSubsetOf(IPermission target) { #if(debug) Console.WriteLine ("************* Entering IsSubsetOf *********************"); #endif if (target == null) { Console.WriteLine ("IsSubsetOf: target == null"); return false; } #if(debug) Console.WriteLine ("This is = " + (( NameIdPermission)this).Name); Console.WriteLine ("Target is " + (( NameIdPermission)target).m_Name); #endif try { NameIdPermission operand = ( NameIdPermission)target; // 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) { return true; } else if (true == this.m_Unrestricted) { return false; } if (this.m_Name != null) { if (operand.m_Name == null) return false; if (this.m_Name == "") return true; } if (this.m_Name.Equals (operand.m_Name)) return true; else { // Check for wild card character '*'. int i = operand.m_Name.LastIndexOf ("*"); if (i > 0) { string prefix = operand.m_Name.Substring (0, i); if (this.m_Name.StartsWith (prefix)) { return true; } } } return false; } catch (InvalidCastException) { throw new ArgumentException (String.Format ("Argument_WrongType", this.GetType ().FullName)); } } public override IPermission Intersect(IPermission target) { Console.WriteLine ("************* Entering Intersect *********************"); if (target == null) { return null; } #if(debug) Console.WriteLine ("This is = " + (( NameIdPermission)this).Name); Console.WriteLine ("Target is " + (( NameIdPermission)target).m_Name); #endif if (!VerifyType(target)) { throw new ArgumentException (String.Format ("Argument is wrong type.", this.GetType ().FullName)); } NameIdPermission operand = ( NameIdPermission)target; if (operand.IsSubsetOf (this)) return operand.Copy (); else if (this.IsSubsetOf (operand)) return this.Copy (); else return null; } public override IPermission Union(IPermission target) { #if(debug) Console.WriteLine ("************* Entering Union *********************"); #endif if (target == null) { return this; } #if(debug) Console.WriteLine ("This is = " + (( NameIdPermission)this).Name); Console.WriteLine ("Target is " + (( NameIdPermission)target).m_Name); #endif if (!VerifyType(target)) { throw new ArgumentException (String.Format ("Argument_WrongType", this.GetType ().FullName)); } NameIdPermission operand = ( NameIdPermission)target; if (operand.IsSubsetOf (this)) return this.Copy (); else if (this.IsSubsetOf (operand)) return operand.Copy (); else return null; } public override void FromXml(SecurityElement e) { // 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. String elUnrestricted = e.Attribute("Unrestricted"); if (null != elUnrestricted) { m_Unrestricted = bool.Parse(elUnrestricted); return; } String elName = e.Attribute( "Name" ); m_Name = elName == null ? null : elName; } public override SecurityElement ToXml() { // Use the SecurityElement class to encode the permission to XML. SecurityElement esd = new SecurityElement("IPermission"); String name = typeof( 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) { esd.AddAttribute("Unrestricted", true.ToString()); } if (m_Name != null) esd.AddAttribute( "Name", m_Name ); return esd; } } }
//#define debug // 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. using namespace System; using namespace System::Security; using namespace System::Security::Permissions; using namespace System::IO; using namespace System::Security::Policy; using namespace System::Collections; using namespace System::Text; [assembly:System::Reflection::AssemblyKeyFile("Key.snk")]; [assembly:System::Security::AllowPartiallyTrustedCallersAttribute]; [Serializable] public ref class NameIdPermission: public CodeAccessPermission, public IUnrestrictedPermission { private: String^ m_Name; bool m_Unrestricted; public: NameIdPermission( String^ name ) { m_Name = name; } NameIdPermission( PermissionState state ) { if ( state == PermissionState::None ) { m_Name = ""; } else if ( state == PermissionState::Unrestricted ) { throw gcnew ArgumentException( "Unrestricted state is not allowed for identity permissions." ); } else { throw gcnew ArgumentException( "Invalid permission state." ); } } property String^ Name { String^ get() { return m_Name; } void set( String^ value ) { m_Name = value; } } public: virtual IPermission^ Copy() override { String^ name = m_Name; return gcnew NameIdPermission( name ); } public: virtual bool IsUnrestricted() { // Always false, unrestricted state is not allowed. return m_Unrestricted; } private: bool VerifyType( IPermission^ target ) { return dynamic_cast<NameIdPermission^>(target) != nullptr; } public: virtual bool IsSubsetOf( IPermission^ target ) override { #if ( debug ) Console::WriteLine( "************* Entering IsSubsetOf *********************" ); #endif if ( target == nullptr ) { Console::WriteLine( "IsSubsetOf: target == null" ); return false; } #if ( debug ) Console::WriteLine( "This is = {0}", ((NameIdPermission)this).Name ); Console::WriteLine( "Target is {0}", ((NameIdPermission)target).m_Name ); #endif try { NameIdPermission^ operand = dynamic_cast<NameIdPermission^>(target); // 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 ) { return true; } else if ( true == this->m_Unrestricted ) { return false; } if ( this->m_Name != nullptr ) { if ( operand->m_Name == nullptr ) { return false; } if ( this->m_Name->Equals( "" ) ) { return true; } } if ( this->m_Name->Equals( operand->m_Name ) ) { return true; } else { // Check for wild card character '*'. int i = operand->m_Name->LastIndexOf( "*" ); if ( i > 0 ) { String^ prefix = operand->m_Name->Substring( 0, i ); if ( this->m_Name->StartsWith( prefix ) ) { return true; } } } return false; } catch ( InvalidCastException^ ) { throw gcnew ArgumentException( String::Format( "Argument_WrongType", this->GetType()->FullName ) ); } } public: virtual IPermission^ Intersect( IPermission^ target ) override { Console::WriteLine( "************* Entering Intersect *********************" ); if ( target == nullptr ) { return nullptr; } #if ( debug ) Console::WriteLine( "This is = {0}", ((NameIdPermission)this).Name ); Console::WriteLine( "Target is {0}", ((NameIdPermission)target).m_Name ); #endif if ( !VerifyType( target ) ) { throw gcnew ArgumentException( String::Format( "Argument is wrong type.", this->GetType()->FullName ) ); } NameIdPermission^ operand = dynamic_cast<NameIdPermission^>(target); if ( operand->IsSubsetOf( this ) ) { return operand->Copy(); } else if ( this->IsSubsetOf( operand ) ) { return this->Copy(); } else { return nullptr; } } public: virtual IPermission^ Union( IPermission^ target ) override { #if ( debug ) Console::WriteLine( "************* Entering Union *********************" ); #endif if ( target == nullptr ) { return this; } #if ( debug ) Console::WriteLine( "This is = {0}", ((NameIdPermission)this).Name ); Console::WriteLine( "Target is {0}", ((NameIdPermission)target).m_Name ); #endif if ( !VerifyType( target ) ) { throw gcnew ArgumentException( String::Format( "Argument_WrongType", this->GetType()->FullName ) ); } NameIdPermission^ operand = dynamic_cast<NameIdPermission^>(target); if ( operand->IsSubsetOf( this ) ) { return this->Copy(); } else if ( this->IsSubsetOf( operand ) ) { return operand->Copy(); } else { return nullptr; } } public: virtual void FromXml( SecurityElement^ e ) override { // 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. String^ elUnrestricted = e->Attribute("Unrestricted"); if ( nullptr != elUnrestricted ) { m_Unrestricted = Boolean::Parse( elUnrestricted ); return; } String^ elName = e->Attribute("Name"); m_Name = elName == nullptr ? nullptr : elName; } public: virtual SecurityElement^ ToXml() override { // Use the SecurityElement class to encode the permission to XML. SecurityElement^ esd = gcnew SecurityElement( "IPermission" ); String^ name = NameIdPermission::typeid->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 ) { esd->AddAttribute( "Unrestricted", true.ToString() ); } if ( m_Name != nullptr ) { esd->AddAttribute( "Name", m_Name ); } return esd; } };




Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


CodeAccessPermission コンストラクタ
アセンブリ: mscorlib (mscorlib.dll 内)


このコンストラクタは、派生クラスのインスタンスが作成されるたびに、型の状態を初期化するために呼び出されます。派生クラスのコンストラクタのコンストラクタ宣言でこのコンストラクタを明示的に呼び出すこともできますが、通常、その必要はありません。ほとんどのコンパイラでは、この呼び出しが自動的に生成されます。

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


CodeAccessPermission メソッド


名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |

CodeAccessPermission メンバ
CodeAccessPermission データ型で公開されるメンバを以下の表に示します。



名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |

- CodeAccessPermissionのページへのリンク