このコンストラクタに宣言セキュリティを追加します。
Public Sub AddDeclarativeSecurity( _
ByVal action As SecurityAction, _ ByVal pset As PermissionSet _)
[C#]
public void AddDeclarativeSecurity(SecurityActionaction,PermissionSetpset);
[C++]
public: void AddDeclarativeSecurity(SecurityActionaction,PermissionSet* pset);
[JScript]
public function AddDeclarativeSecurity(
action : SecurityAction,pset : PermissionSet);
パラメータ
- action
Demand、Assert など、実行するセキュリティ アクション。 - pset
アクションが適用する一連のアクセス許可。
例外
例外の種類 | 条件 |
---|---|
ArgumentOutOfRangeException | action が無効です。RequestMinimum、RequestOptional、および RequestRefuse が無効です。 |
InvalidOperationException | 格納している型が、 CreateType を使用して既に作成されています。
または アクセス許可セット pset に、既に AddDeclarativeSecurity で追加されたアクションが含まれています。 |
ArgumentNullException | pset が null 参照 (Visual Basic では Nothing) です。 |
解説
AddDeclarativeSecurity は、呼び出すたびにセキュリティ アクション (Demand、Assert、Deny など) とそのアクションを適用するアクセス許可を指定して、複数回呼び出すことができます。
AddDeclarativeSecurity の使用方法については、次のコード例を参照してください。
Dim myMethodBuilder As MethodBuilder = Nothing
Dim myCurrentDomain As AppDomain = AppDomain.CurrentDomain
' Create assembly in current CurrentDomain
Dim myAssemblyName As New AssemblyName()
myAssemblyName.Name = "TempAssembly"
' Create a dynamic assembly
myAssemblyBuilder = _
myCurrentDomain.DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess.RunAndSave)
' Create a dynamic module in the assembly.
myModuleBuilder = myAssemblyBuilder.DefineDynamicModule("TempModule")
Dim myFieldInfo As FieldInfo = _
myModuleBuilder.DefineUninitializedData("myField", 2, FieldAttributes.Public)
' Create a type in the module
Dim myTypeBuilder As TypeBuilder = _
myModuleBuilder.DefineType("TempClass", TypeAttributes.Public)
Dim myGreetingField As FieldBuilder = _
myTypeBuilder.DefineField("Greeting", GetType(String), FieldAttributes.Public)
Dim myConstructorArgs As Type() = {GetType(String)}
' Define a constructor of the dynamic class.
Dim myConstructor As ConstructorBuilder = _
myTypeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, _
myConstructorArgs)
Dim myPset As New PermissionSet(PermissionState.Unrestricted)
' Add declarative security to the constructor.
Console.WriteLine("Adding declarative security to the constructor.....")
Console.WriteLine("The Security action to be taken is ""DENY"" and" + _
" Permission set is ""UNRESTRICTED"".")
myConstructor.AddDeclarativeSecurity(SecurityAction.Deny, myPset)
Dim myMethodAttributes As MethodAttributes = myConstructor.Attributes
Dim myAttributeType As Type = GetType(MethodAttributes)
Dim myAttribValue As Integer = CInt(myMethodAttributes)
If Not myAttributeType.IsEnum Then
Console.WriteLine("This is not an Enum")
End If
Dim myFieldInfo1 As FieldInfo() = myAttributeType.GetFields(BindingFlags.Public Or _
BindingFlags.Static)
Console.WriteLine("The Field info names of the Attributes for the constructor are:")
Dim i As Integer
For i = 0 To myFieldInfo1.Length - 1
Dim myFieldValue As Integer = CType(myFieldInfo1(i).GetValue(Nothing), Int32)
If(myFieldValue And myAttribValue) = myFieldValue Then
Console.WriteLine(" " + myFieldInfo1(i).Name)
End If
Next i
Dim myType2 As Type = myConstructor.DeclaringType
Console.WriteLine("The declaring type is : " + myType2.ToString())
Dim myParameterBuilder1 As ParameterBuilder = _
myConstructor.DefineParameter(1, ParameterAttributes.Out, "My Parameter Name1")
Console.WriteLine("The name of the parameter is : " + myParameterBuilder1.Name)
If myParameterBuilder1.IsIn Then
Console.WriteLine(myParameterBuilder1.Name + " is Input parameter.")
Else
Console.WriteLine(myParameterBuilder1.Name + " is not Input Parameter.")
End If
Dim myParameterBuilder2 As ParameterBuilder = _
myConstructor.DefineParameter(1, ParameterAttributes.In, "My Parameter Name2")
Console.WriteLine("The Parameter name is : " + myParameterBuilder2.Name)
If myParameterBuilder2.IsIn Then
Console.WriteLine(myParameterBuilder2.Name + " is Input parameter.")
Else
Console.WriteLine(myParameterBuilder2.Name + " is not Input Parameter.")
End If
[C#]
MethodBuilder myMethodBuilder=null;
AppDomain myCurrentDomain = AppDomain.CurrentDomain;
// Create assembly in current CurrentDomain
AssemblyName myAssemblyName = new AssemblyName();
myAssemblyName.Name = "TempAssembly";
// Create a dynamic assembly
myAssemblyBuilder = myCurrentDomain.DefineDynamicAssembly
(myAssemblyName, AssemblyBuilderAccess.RunAndSave);
// Create a dynamic module in the assembly.
myModuleBuilder = myAssemblyBuilder.DefineDynamicModule("TempModule");
FieldInfo myFieldInfo =
myModuleBuilder.DefineUninitializedData("myField",2,FieldAttributes.Public);
// Create a type in the module
TypeBuilder myTypeBuilder = myModuleBuilder.DefineType("TempClass",TypeAttributes.Public);
FieldBuilder myGreetingField = myTypeBuilder.DefineField("Greeting",
typeof(String), FieldAttributes.Public);
Type[] myConstructorArgs = { typeof(String) };
// Define a constructor of the dynamic class.
ConstructorBuilder myConstructor = myTypeBuilder.DefineConstructor(
MethodAttributes.Public, CallingConventions.Standard, myConstructorArgs);
PermissionSet myPset = new PermissionSet(PermissionState.Unrestricted);
// Add declarative security to the constructor.
Console.WriteLine("Adding declarative security to the constructor.....");
Console.WriteLine("The Security action to be taken is \"DENY\" and" +
" Permission set is \"UNRESTRICTED\".");
myConstructor.AddDeclarativeSecurity(SecurityAction.Deny,myPset);
MethodAttributes myMethodAttributes = myConstructor.Attributes;
Type myAttributeType = typeof(MethodAttributes);
int myAttribValue = (int) myMethodAttributes;
if(! myAttributeType.IsEnum)
{
Console.WriteLine("This is not an Enum");
}
FieldInfo[] myFieldInfo1 = myAttributeType.GetFields(BindingFlags.Public | BindingFlags.Static);
Console.WriteLine("The Field info names of the Attributes for the constructor are:");
for (int i = 0; i < myFieldInfo1.Length; i++)
{
int myFieldValue = (Int32)myFieldInfo1[i].GetValue(null);
if ((myFieldValue & myAttribValue) == myFieldValue)
{
Console.WriteLine(" " + myFieldInfo1[i].Name);
}
}
Type myType2 = myConstructor.DeclaringType;
Console.WriteLine("The declaring type is : "+myType2.ToString());
ParameterBuilder myParameterBuilder1 =
myConstructor.DefineParameter(1, ParameterAttributes.Out, "My Parameter Name1");
Console.WriteLine("The name of the parameter is : " +
myParameterBuilder1.Name);
if(myParameterBuilder1.IsIn)
Console.WriteLine(myParameterBuilder1.Name +" is Input parameter.");
else
Console.WriteLine(myParameterBuilder1.Name +" is not Input Parameter.");
ParameterBuilder myParameterBuilder2 =
myConstructor.DefineParameter(1, ParameterAttributes.In, "My Parameter Name2");
Console.WriteLine("The Parameter name is : " +
myParameterBuilder2.Name);
if(myParameterBuilder2.IsIn)
Console.WriteLine(myParameterBuilder2.Name +" is Input parameter.");
else
Console.WriteLine(myParameterBuilder2.Name + " is not Input Parameter.");
[C++]
MethodBuilder* myMethodBuilder=0;
AppDomain* myCurrentDomain = AppDomain::CurrentDomain;
// Create assembly in current CurrentDomain
AssemblyName* myAssemblyName = new AssemblyName();
myAssemblyName->Name = S"TempAssembly";
// Create a dynamic assembly
myAssemblyBuilder = myCurrentDomain->DefineDynamicAssembly
(myAssemblyName, AssemblyBuilderAccess::RunAndSave);
// Create a dynamic module in the assembly.
myModuleBuilder = myAssemblyBuilder->DefineDynamicModule(S"TempModule");
FieldInfo* myFieldInfo =
myModuleBuilder->DefineUninitializedData(S"myField",2,FieldAttributes::Public);
// Create a type in the module
TypeBuilder* myTypeBuilder = myModuleBuilder->DefineType(S"TempClass",TypeAttributes::Public);
FieldBuilder* myGreetingField = myTypeBuilder->DefineField(S"Greeting",
__typeof(String), FieldAttributes::Public);
Type* myConstructorArgs[] = { __typeof(String) };
// Define a constructor of the dynamic class.
ConstructorBuilder* myConstructor = myTypeBuilder->DefineConstructor(
MethodAttributes::Public, CallingConventions::Standard, myConstructorArgs);
PermissionSet* myPset = new PermissionSet(PermissionState::Unrestricted);
// Add declarative security to the constructor.
Console::WriteLine(S"Adding declarative security to the constructor.....");
Console::WriteLine(S"The Security action to be taken is \"DENY\" and"
S" Permission set is \"UNRESTRICTED\".");
myConstructor->AddDeclarativeSecurity(SecurityAction::Deny,myPset);
MethodAttributes myMethodAttributes = myConstructor->Attributes;
Type* myAttributeType = __typeof(MethodAttributes);
int myAttribValue = (int) myMethodAttributes;
if(! myAttributeType->IsEnum)
{
Console::WriteLine(S"This is not an Enum");
}
FieldInfo* myFieldInfo1[] = myAttributeType->GetFields
(static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static));
Console::WriteLine(S"The Field info names of the Attributes for the constructor are:");
for (int i = 0; i < myFieldInfo1->Length; i++)
{
int myFieldValue = *dynamic_cast<Int32*>(myFieldInfo1[i]->GetValue(0));
if ((myFieldValue & myAttribValue) == myFieldValue)
{
Console::WriteLine(S" {0}", myFieldInfo1[i]->Name);
}
}
Type* myType2 = myConstructor->DeclaringType;
Console::WriteLine(S"The declaring type is : {0}", myType2);
ParameterBuilder* myParameterBuilder1 =
myConstructor->DefineParameter(1, ParameterAttributes::Out, S"My Parameter Name1");
Console::WriteLine(S"The name of the parameter is : {0}", myParameterBuilder1->Name);
if(myParameterBuilder1->IsIn)
Console::WriteLine(S"{0} is Input parameter.", myParameterBuilder1->Name);
else
Console::WriteLine(S"{0} is not Input Parameter.", myParameterBuilder1->Name);
ParameterBuilder* myParameterBuilder2 =
myConstructor->DefineParameter(1, ParameterAttributes::In, S"My Parameter Name2");
Console::WriteLine(S"The Parameter name is : {0}", myParameterBuilder2->Name);
if(myParameterBuilder2->IsIn)
Console::WriteLine(S"{0} is Input parameter.", myParameterBuilder2->Name);
else
Console::WriteLine(S"{0} is not Input Parameter.", myParameterBuilder2->Name);
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
参照
ConstructorBuilder クラス | ConstructorBuilder メンバ | System.Reflection.Emit 名前空間