Imports System
Imports System.Security
Imports System.Security.Permissions
Imports Microsoft.VisualBasic
<Assembly: CLSCompliant(True)>
Public Class ReflectionPermissionDemo
' IsSubsetOf determines whether the current permission is a subset of the specified permission.
Private Function IsSubsetOfDemo() As Boolean
Dim returnValue As Boolean = True
Dim reflection1, reflection2 As ReflectionPermissionFlag
Dim reflectionPerm1, reflectionPerm2 As ReflectionPermission
Dim reflectionGen1 As New ReflectionGenerator()
Dim reflectionGen2 As New ReflectionGenerator()
reflectionGen1.ResetIndex()
While reflectionGen1.CreateReflection(reflection1)
reflectionPerm1 = New ReflectionPermission(reflection1)
reflectionGen2.ResetIndex()
Console.WriteLine("********************************************************" & ControlChars.Lf)
While reflectionGen2.CreateReflection(reflection2)
reflectionPerm2 = New ReflectionPermission(reflection2)
Try
If reflectionPerm1.IsSubsetOf(reflectionPerm2) Then
Console.WriteLine((reflectionPerm1.Flags.ToString() & " is a subset of " _
& reflectionPerm2.Flags.ToString()))
Else
Console.WriteLine((reflectionPerm1.Flags.ToString() & " is not a subset of " _
& reflectionPerm2.Flags.ToString()))
End If
Catch e As Exception
Console.WriteLine(("An exception was thrown for subset :" & reflectionPerm1.ToString() _
& ControlChars.Lf & reflectionPerm2.ToString() & ControlChars.Lf & e.ToString()))
returnValue = False
End Try
ContinueWhile2:
End While
ContinueWhile1:
End While
Return returnValue
End Function 'IsSubsetOfDemo
' Union creates a new permission that is the union of the current permission and the specified permission.
Private Function UnionDemo() As Boolean
Dim returnValue As Boolean = True
Dim reflection1, reflection2 As ReflectionPermissionFlag
Dim reflectionPerm1, reflectionPerm2 As ReflectionPermission
Dim reflectionPerm3 As IPermission
Dim reflectionGen1 As New ReflectionGenerator()
Dim reflectionGen2 As New ReflectionGenerator()
reflectionGen1.ResetIndex()
While reflectionGen1.CreateReflection(reflection1)
reflectionPerm1 = New ReflectionPermission(reflection1)
Console.WriteLine("**********************************************************" & ControlChars.Lf)
reflectionGen2.ResetIndex()
While reflectionGen2.CreateReflection(reflection2)
reflectionPerm2 = New ReflectionPermission(reflection2)
reflectionPerm3 = CType(reflectionPerm1.Union(reflectionPerm2), ReflectionPermission)
reflectionPerm3 = reflectionPerm1.Union(reflectionPerm2)
If reflectionPerm3 Is Nothing Then
Console.WriteLine(("The union of " & reflection1.ToString() & " and " _
& reflection2.ToString() & " is null."))
Else
Console.WriteLine(("The union of " & reflectionPerm1.Flags.ToString() & " and " _
& reflectionPerm2.Flags.ToString() & " = " _
& CType(reflectionPerm3, ReflectionPermission).Flags.ToString()))
End If
ContinueWhile2:
End While
ContinueWhile1:
End While
Return returnValue
End Function 'UnionDemo
' Intersect creates and returns a new permission that is the intersection of the current
' permission and the permission specified.
Private Function IntersectDemo() As Boolean
Dim returnValue As Boolean = True
Dim reflection1, reflection2 As ReflectionPermissionFlag
Dim reflectionPerm1, reflectionPerm2, reflectionPerm3 As ReflectionPermission
Dim reflectionGen1 As New ReflectionGenerator()
Dim reflectionGen2 As New ReflectionGenerator()
reflectionGen1.ResetIndex()
While reflectionGen1.CreateReflection(reflection1)
reflectionPerm1 = New ReflectionPermission(reflection1)
Console.WriteLine("**********************************************************" & ControlChars.Lf)
reflectionGen2.ResetIndex()
While reflectionGen2.CreateReflection(reflection2)
reflectionPerm2 = New ReflectionPermission(reflection2)
reflectionPerm3 = CType(reflectionPerm1.Intersect(reflectionPerm2), ReflectionPermission)
If Not (reflectionPerm3 Is Nothing) Then
Console.WriteLine(("The intersection of " & reflection1.ToString() & " and " _
& reflection2.ToString() & " = " _
& CType(reflectionPerm3, ReflectionPermission).Flags.ToString()))
Else
Console.WriteLine(("The intersection of " & reflection1.ToString() & " and " _
& reflection2.ToString() & " is null."))
End If
ContinueWhile2:
End While
ContinueWhile1:
End While
Return returnValue
End Function 'IntersectDemo
'Copy creates and returns an identical copy of the current permission.
Private Function CopyDemo() As Boolean
Dim returnValue As Boolean = True
Dim reflection1 As ReflectionPermissionFlag
Dim reflectionPerm1, reflectionPerm2 As ReflectionPermission
Dim reflectionGen1 As New ReflectionGenerator()
Dim reflectionGen2 As New ReflectionGenerator()
reflectionGen1.ResetIndex()
While reflectionGen1.CreateReflection(reflection1)
reflectionPerm1 = New ReflectionPermission(reflection1)
reflectionGen2.ResetIndex()
Console.WriteLine("********************************************************" & ControlChars.Lf)
Try
reflectionPerm2 = CType(reflectionPerm1.Copy(), ReflectionPermission)
Console.WriteLine(("Result of copy = " & reflectionPerm2.ToString()))
Catch e As Exception
Console.WriteLine(("Copy failed :" & reflectionPerm1.ToString() & e.ToString()))
End Try
ContinueWhile1:
End While
Return returnValue
End Function 'CopyDemo
' ToXml creates an XML encoding of the permission and its current state;
' FromXml reconstructs a permission with the specified state from the XML encoding.
Private Function ToFromXmlDemo() As Boolean
Dim returnValue As Boolean = True
Dim reflection1 As ReflectionPermissionFlag
Dim reflectionPerm1, reflectionPerm2 As ReflectionPermission
Dim reflectionGen1 As New ReflectionGenerator()
Dim reflectionGen2 As New ReflectionGenerator()
reflectionGen1.ResetIndex()
While reflectionGen1.CreateReflection(reflection1)
reflectionPerm1 = New ReflectionPermission(reflection1)
Console.WriteLine("********************************************************" & ControlChars.Lf)
reflectionGen2.ResetIndex()
Try
reflectionPerm2 = New ReflectionPermission(PermissionState.None)
reflectionPerm2.FromXml(reflectionPerm1.ToXml())
Console.WriteLine(("Result of ToFromXml = " & reflectionPerm2.ToString()))
Catch e As Exception
Console.WriteLine(("ToFromXml failed :" & reflectionPerm1.ToString() & e.ToString()))
End Try
ContinueWhile1:
End While
Return returnValue
End Function 'ToFromXmlDemo
' Invoke all demos.
Public Function runDemo() As Boolean
Dim returnCode As Boolean = True
Dim tempReturnCode As Boolean
' Call the IsSubsetOf demo.
tempReturnCode = IsSubsetOfDemo()
If tempReturnCode Then
Console.Out.WriteLine("IsSubsetOf demo completed successfully.")
Else
Console.Out.WriteLine("IsSubsetOf demo failed.")
End If
returnCode = tempReturnCode AndAlso returnCode
' Call the Union demo.
tempReturnCode = UnionDemo()
If tempReturnCode Then
Console.Out.WriteLine("Union demo completed successfully.")
Else
Console.Out.WriteLine("Union demo failed.")
End If
returnCode = tempReturnCode AndAlso returnCode
' Call the Intersect demo.
tempReturnCode = IntersectDemo()
If tempReturnCode Then
Console.Out.WriteLine("Intersect demo completed successfully.")
Else
Console.Out.WriteLine("Intersect demo failed.")
End If
returnCode = tempReturnCode AndAlso returnCode
' Call the Copy demo.
tempReturnCode = CopyDemo()
If tempReturnCode Then
Console.Out.WriteLine("Copy demo completed successfully.")
Else
Console.Out.WriteLine("Copy demo failed.")
End If
returnCode = tempReturnCode AndAlso returnCode
' Call the ToFromXml demo.
tempReturnCode = ToFromXmlDemo()
If tempReturnCode Then
Console.Out.WriteLine("ToFromXml demo completed successfully.")
Else
Console.Out.WriteLine("ToFromXml demo failed.")
End If
returnCode = tempReturnCode AndAlso returnCode
Return returnCode
End Function 'runDemo
' Test harness.
Public Overloads Shared Sub Main(ByVal args() As [String])
Try
Dim democase As New ReflectionPermissionDemo()
Dim returnCode As Boolean = democase.runDemo()
If returnCode Then
Console.Out.WriteLine("ReflectionPermission demo completed successfully.")
Console.Out.WriteLine("Press the Enter key to exit.")
Dim consoleInput As String = Console.ReadLine()
System.Environment.ExitCode = 100
Else
Console.Out.WriteLine("ReflectionPermission demo failed.")
Console.Out.WriteLine("Press the Enter key to exit.")
Dim consoleInput As String = Console.ReadLine()
System.Environment.ExitCode = 101
End If
Catch e As Exception
Console.Out.WriteLine("ReflectionPermission demo failed.")
Console.WriteLine(e.ToString())
Console.Out.WriteLine("Press the Enter key to exit.")
Dim consoleInput As String = Console.ReadLine()
System.Environment.ExitCode = 101
End Try
End Sub 'Main
End Class 'ReflectionPermissionDemo
' This class generates ReflectionPermission objects.
Friend Class ReflectionGenerator
Private myReflection As ReflectionPermissionFlag() = {ReflectionPermissionFlag.AllFlags, ReflectionPermissionFlag.MemberAccess, ReflectionPermissionFlag.NoFlags, ReflectionPermissionFlag.ReflectionEmit, ReflectionPermissionFlag.TypeInformation}
Private reflectionIndex As Integer = 0
Public Sub New()
ResetIndex()
End Sub 'New
Public Sub ResetIndex()
reflectionIndex = 0
End Sub 'ResetIndex
' CreateReflection creates a ReflectionPermission object.
Public Function CreateReflection(ByRef reflection As ReflectionPermissionFlag) As Boolean
If reflectionIndex >= myReflection.Length Then
reflection = ReflectionPermissionFlag.NoFlags
reflectionIndex &= 1
Return False
End If
reflection = myReflection(reflectionIndex)
reflectionIndex = reflectionIndex + 1
Return True
End Function
End Class
using System;
using System.Security;
using System.Security.Permissions;
[assembly: CLSCompliant(true)]
public class ReflectionPermissionDemo
{
// IsSubsetOf determines whether the current permission is a subset of the specified permission.
private bool IsSubsetOfDemo()
{
bool returnValue = true;
ReflectionPermissionFlag reflection1, reflection2;
ReflectionPermission reflectionPerm1, reflectionPerm2;
ReflectionGenerator reflectionGen1 = new ReflectionGenerator();
ReflectionGenerator reflectionGen2 = new ReflectionGenerator();
reflectionGen1.ResetIndex();
while (reflectionGen1.CreateReflection(out reflection1))
{
reflectionPerm1 = new ReflectionPermission(reflection1);
reflectionGen2.ResetIndex();
Console.WriteLine("********************************************************\n");
while (reflectionGen2.CreateReflection(out reflection2))
{
reflectionPerm2 = new ReflectionPermission(reflection2);
try
{
if (reflectionPerm1.IsSubsetOf(reflectionPerm2))
{
Console.WriteLine(reflectionPerm1.Flags + " is a subset of " +
reflectionPerm2.Flags);
}
else
{
Console.WriteLine(reflectionPerm1.Flags + " is not a subset of " +
reflectionPerm2.Flags);
}
}
catch (Exception e)
{
Console.WriteLine("An exception was thrown for subset :" + reflectionPerm1 + "\n" +
reflectionPerm2 + "\n" + e);
returnValue = false;
}
}
}
return returnValue;
}
// Union creates a new permission that is the union of the current permission and the specified permission.
private bool UnionDemo()
{
bool returnValue = true;
ReflectionPermissionFlag reflection1, reflection2;
ReflectionPermission reflectionPerm1, reflectionPerm2;
IPermission reflectionPerm3;
ReflectionGenerator reflectionGen1 = new ReflectionGenerator();
ReflectionGenerator reflectionGen2 = new ReflectionGenerator();
reflectionGen1.ResetIndex();
while (reflectionGen1.CreateReflection(out reflection1))
{
reflectionPerm1 = new ReflectionPermission(reflection1);
Console.WriteLine("**********************************************************\n");
reflectionGen2.ResetIndex();
while (reflectionGen2.CreateReflection(out reflection2))
{
reflectionPerm2 = new ReflectionPermission(reflection2);
reflectionPerm3 = (ReflectionPermission)reflectionPerm1.Union(reflectionPerm2);
reflectionPerm3 = reflectionPerm1.Union(reflectionPerm2);
if (reflectionPerm3 == null)
{
Console.WriteLine("The union of " + reflection1 + " and " + reflection2 + " is null.");
}
else
{
Console.WriteLine("The union of " + reflectionPerm1.Flags + " and " +
reflectionPerm2.Flags + " = " +
((ReflectionPermission)reflectionPerm3).Flags.ToString());
}
}
}
return returnValue;
}
// Intersect creates and returns a new permission that is the intersection of the current
// permission and the permission specified.
private bool IntersectDemo()
{
bool returnValue = true;
ReflectionPermissionFlag reflection1, reflection2;
ReflectionPermission reflectionPerm1, reflectionPerm2, reflectionPerm3;
ReflectionGenerator reflectionGen1 = new ReflectionGenerator();
ReflectionGenerator reflectionGen2 = new ReflectionGenerator();
reflectionGen1.ResetIndex();
while (reflectionGen1.CreateReflection(out reflection1))
{
reflectionPerm1 = new ReflectionPermission(reflection1);
Console.WriteLine("**********************************************************\n");
reflectionGen2.ResetIndex();
while (reflectionGen2.CreateReflection(out reflection2))
{
reflectionPerm2 = new ReflectionPermission(reflection2);
reflectionPerm3 = (ReflectionPermission)reflectionPerm1.Intersect(reflectionPerm2);
if (reflectionPerm3 != null)
{
Console.WriteLine("The intersection of " + reflection1 + " and " + reflection2 + " = " +
((ReflectionPermission)reflectionPerm3).Flags.ToString());
}
else
{
Console.WriteLine("The intersection of " + reflection1 + " and " + reflection2 + " is null.");
}
}
}
return returnValue;
}
//Copy creates and returns an identical copy of the current permission.
private bool CopyDemo()
{
bool returnValue = true;
ReflectionPermissionFlag reflection1;
ReflectionPermission reflectionPerm1, reflectionPerm2;
ReflectionGenerator reflectionGen1 = new ReflectionGenerator();
ReflectionGenerator reflectionGen2 = new ReflectionGenerator();
reflectionGen1.ResetIndex();
while (reflectionGen1.CreateReflection(out reflection1))
{
reflectionPerm1 = new ReflectionPermission(reflection1);
reflectionGen2.ResetIndex();
Console.WriteLine("********************************************************\n");
try
{
reflectionPerm2 = (ReflectionPermission)reflectionPerm1.Copy();
Console.WriteLine("Result of copy = " + reflectionPerm2.ToString());
}
catch (Exception e)
{
Console.WriteLine("Copy failed :" + reflectionPerm1.ToString() + e);
continue;
}
}
return returnValue;
}
// ToXml creates an XML encoding of the permission and its current state;
// FromXml reconstructs a permission with the specified state from the XML encoding.
private bool ToFromXmlDemo()
{
bool returnValue = true;
ReflectionPermissionFlag reflection1;
ReflectionPermission reflectionPerm1, reflectionPerm2;
ReflectionGenerator reflectionGen1 = new ReflectionGenerator();
ReflectionGenerator reflectionGen2 = new ReflectionGenerator();
reflectionGen1.ResetIndex();
while (reflectionGen1.CreateReflection(out reflection1))
{
reflectionPerm1 = new ReflectionPermission(reflection1);
Console.WriteLine("********************************************************\n");
reflectionGen2.ResetIndex();
try
{
reflectionPerm2 = new ReflectionPermission(PermissionState.None);
reflectionPerm2.FromXml(reflectionPerm1.ToXml());
Console.WriteLine("Result of ToFromXml = " +
reflectionPerm2.ToString());
}
catch (Exception e)
{
Console.WriteLine("ToFromXml failed :" + reflectionPerm1.ToString() + e);
continue;
}
}
return returnValue;
}
// Invoke all demos.
public bool runDemo()
{
bool returnCode = true;
bool tempReturnCode;
// Call the IsSubsetOf demo.
if (tempReturnCode = IsSubsetOfDemo()) Console.Out.WriteLine("IsSubsetOf demo completed successfully.");
else Console.Out.WriteLine("IsSubsetOf demo failed.");
returnCode = tempReturnCode && returnCode;
// Call the Union demo.
if (tempReturnCode = UnionDemo()) Console.Out.WriteLine("Union demo completed successfully.");
else Console.Out.WriteLine("Union demo failed.");
returnCode = tempReturnCode && returnCode;
// Call the Intersect demo.
if (tempReturnCode = IntersectDemo()) Console.Out.WriteLine("Intersect demo completed successfully.");
else Console.Out.WriteLine("Intersect demo failed.");
returnCode = tempReturnCode && returnCode;
// Call the Copy demo.
if (tempReturnCode = CopyDemo()) Console.Out.WriteLine("Copy demo completed successfully.");
else Console.Out.WriteLine("Copy demo failed.");
returnCode = tempReturnCode && returnCode;
// Call the ToFromXml demo.
if (tempReturnCode = ToFromXmlDemo()) Console.Out.WriteLine("ToFromXml demo completed successfully.");
else Console.Out.WriteLine("ToFromXml demo failed.");
returnCode = tempReturnCode && returnCode;
return (returnCode);
}
// Test harness.
public static void Main(String[] args)
{
try
{
ReflectionPermissionDemo democase = new ReflectionPermissionDemo();
bool returnCode = democase.runDemo();
if (returnCode)
{
Console.Out.WriteLine("ReflectionPermission demo completed successfully.");
Console.Out.WriteLine("Press the Enter key to exit.");
string consoleInput = Console.ReadLine();
System.Environment.ExitCode = 100;
}
else
{
Console.Out.WriteLine("ReflectionPermission demo failed.");
Console.Out.WriteLine("Press the Enter key to exit.");
string consoleInput = Console.ReadLine();
System.Environment.ExitCode = 101;
}
}
catch (Exception e)
{
Console.Out.WriteLine("ReflectionPermission demo failed.");
Console.WriteLine(e.ToString());
Console.Out.WriteLine("Press the Enter key to exit.");
string consoleInput = Console.ReadLine();
System.Environment.ExitCode = 101;
}
}
}
// This class generates ReflectionPermission objects.
internal class ReflectionGenerator
{
private ReflectionPermissionFlag[] myReflection =
{
ReflectionPermissionFlag.AllFlags,
ReflectionPermissionFlag.MemberAccess,
ReflectionPermissionFlag.NoFlags,
ReflectionPermissionFlag.ReflectionEmit,
ReflectionPermissionFlag.TypeInformation};
private int reflectionIndex = 0;
public ReflectionGenerator()
{
ResetIndex();
}
public void ResetIndex()
{
reflectionIndex = 0;
}
// CreateReflection creates a ReflectionPermission object.
public bool CreateReflection(out ReflectionPermissionFlag reflection)
{
if (reflectionIndex >= myReflection.Length)
{
reflection = ReflectionPermissionFlag.NoFlags;
reflectionIndex++;
return false;
}
reflection = myReflection[reflectionIndex++];
return true;
}
}
using namespace System;
using namespace System::Security;
using namespace System::Security::Permissions;
using namespace System::Runtime::InteropServices;
// This class generates ReflectionPermission objects.
[assembly:CLSCompliant(true)];
private ref class ReflectionGenerator
{
private:
array<ReflectionPermissionFlag>^myReflection;
int reflectionIndex;
public:
ReflectionGenerator()
{
array<ReflectionPermissionFlag>^ temp0 = {ReflectionPermissionFlag::AllFlags,ReflectionPermissionFlag::MemberAccess,ReflectionPermissionFlag::NoFlags,ReflectionPermissionFlag::ReflectionEmit,ReflectionPermissionFlag::TypeInformation};
myReflection = temp0;
ResetIndex();
}
void ResetIndex()
{
reflectionIndex = 0;
}
// CreateReflection creates a ReflectionPermission object.
bool CreateReflection( [Out]ReflectionPermissionFlag * reflection )
{
if ( reflectionIndex >= myReflection->Length )
{
*reflection = ReflectionPermissionFlag::NoFlags;
reflectionIndex++;
return false;
}
*reflection = myReflection[ reflectionIndex++ ];
return true;
}
};
// End of ReflectionGenerator.
public ref class ReflectionPermissionDemo
{
private:
// IsSubsetOf determines whether the current permission is a subset of the specified permission.
bool IsSubsetOfDemo()
{
bool returnValue = true;
ReflectionPermissionFlag reflection1;
ReflectionPermissionFlag reflection2;
ReflectionPermission^ reflectionPerm1;
ReflectionPermission^ reflectionPerm2;
ReflectionGenerator^ reflectionGen1 = gcnew ReflectionGenerator;
ReflectionGenerator^ reflectionGen2 = gcnew ReflectionGenerator;
reflectionGen1->ResetIndex();
while ( reflectionGen1->CreateReflection( &reflection1 ) )
{
reflectionPerm1 = gcnew ReflectionPermission( reflection1 );
reflectionGen2->ResetIndex();
Console::WriteLine( "********************************************************\n" );
while ( reflectionGen2->CreateReflection( &reflection2 ) )
{
reflectionPerm2 = gcnew ReflectionPermission( reflection2 );
try
{
if ( reflectionPerm1->IsSubsetOf( reflectionPerm2 ) )
{
Console::WriteLine( "{0} is a subset of {1}", reflectionPerm1->Flags, reflectionPerm2->Flags );
}
else
{
Console::WriteLine( "{0} is not a subset of {1}", reflectionPerm1->Flags, reflectionPerm2->Flags );
}
}
catch ( Exception^ e )
{
Console::WriteLine( "An exception was thrown for subset : {0}\n{1}\n{2}", reflectionPerm1, reflectionPerm2, e );
returnValue = false;
}
}
}
return returnValue;
}
// Union creates a new permission that is the union of the current permission and the specified permission.
bool UnionDemo()
{
bool returnValue = true;
ReflectionPermissionFlag reflection1;
ReflectionPermissionFlag reflection2;
ReflectionPermission^ reflectionPerm1;
ReflectionPermission^ reflectionPerm2;
IPermission^ reflectionPerm3;
ReflectionGenerator^ reflectionGen1 = gcnew ReflectionGenerator;
ReflectionGenerator^ reflectionGen2 = gcnew ReflectionGenerator;
reflectionGen1->ResetIndex();
while ( reflectionGen1->CreateReflection( &reflection1 ) )
{
reflectionPerm1 = gcnew ReflectionPermission( reflection1 );
Console::WriteLine( "**********************************************************\n" );
reflectionGen2->ResetIndex();
while ( reflectionGen2->CreateReflection( &reflection2 ) )
{
reflectionPerm2 = gcnew ReflectionPermission( reflection2 );
reflectionPerm3 = dynamic_cast<ReflectionPermission^>(reflectionPerm1->Union( reflectionPerm2 ));
reflectionPerm3 = reflectionPerm1->Union( reflectionPerm2 );
if ( reflectionPerm3 == nullptr )
{
Console::WriteLine( "The union of {0} and {1} is null.", reflection1, reflection2 );
}
else
{
Console::WriteLine( "The union of {0} and {1} = {2}", reflectionPerm1->Flags, reflectionPerm2->Flags, (dynamic_cast<ReflectionPermission^>(reflectionPerm3))->Flags );
}
}
}
return returnValue;
}
// Intersect creates and returns a new permission that is the intersection of the current
// permission and the permission specified.
bool IntersectDemo()
{
bool returnValue = true;
ReflectionPermissionFlag reflection1;
ReflectionPermissionFlag reflection2;
ReflectionPermission^ reflectionPerm1;
ReflectionPermission^ reflectionPerm2;
ReflectionPermission^ reflectionPerm3;
ReflectionGenerator^ reflectionGen1 = gcnew ReflectionGenerator;
ReflectionGenerator^ reflectionGen2 = gcnew ReflectionGenerator;
reflectionGen1->ResetIndex();
while ( reflectionGen1->CreateReflection( &reflection1 ) )
{
reflectionPerm1 = gcnew ReflectionPermission( reflection1 );
Console::WriteLine( "**********************************************************\n" );
reflectionGen2->ResetIndex();
while ( reflectionGen2->CreateReflection( &reflection2 ) )
{
reflectionPerm2 = gcnew ReflectionPermission( reflection2 );
reflectionPerm3 = dynamic_cast<ReflectionPermission^>(reflectionPerm1->Intersect( reflectionPerm2 ));
if ( reflectionPerm3 != nullptr )
{
Console::WriteLine( "The intersection of {0} and {1} = {2}", reflection1, reflection2, (dynamic_cast<ReflectionPermission^>(reflectionPerm3))->Flags );
}
else
{
Console::WriteLine( "The intersection of {0} and {1} is null", reflection1, reflection2 );
}
}
}
return returnValue;
}
//Copy creates and returns an identical copy of the current permission.
bool CopyDemo()
{
bool returnValue = true;
ReflectionPermissionFlag reflection1;
ReflectionPermission^ reflectionPerm1;
ReflectionPermission^ reflectionPerm2;
ReflectionGenerator^ reflectionGen1 = gcnew ReflectionGenerator;
ReflectionGenerator^ reflectionGen2 = gcnew ReflectionGenerator;
reflectionGen1->ResetIndex();
while ( reflectionGen1->CreateReflection( &reflection1 ) )
{
reflectionPerm1 = gcnew ReflectionPermission( reflection1 );
reflectionGen2->ResetIndex();
Console::WriteLine( "********************************************************\n" );
try
{
reflectionPerm2 = dynamic_cast<ReflectionPermission^>(reflectionPerm1->Copy());
Console::WriteLine( "Result of copy = {0}", reflectionPerm2 );
}
catch ( Exception^ e )
{
Console::WriteLine( "Copy failed : {0}{1}", reflectionPerm1, e );
continue;
}
}
return returnValue;
}
// ToXml creates an XML encoding of the permission and its current state;
// FromXml reconstructs a permission with the specified state from the XML encoding.
bool ToFromXmlDemo()
{
bool returnValue = true;
ReflectionPermissionFlag reflection1;
ReflectionPermission^ reflectionPerm1;
ReflectionPermission^ reflectionPerm2;
ReflectionGenerator^ reflectionGen1 = gcnew ReflectionGenerator;
ReflectionGenerator^ reflectionGen2 = gcnew ReflectionGenerator;
reflectionGen1->ResetIndex();
while ( reflectionGen1->CreateReflection( &reflection1 ) )
{
reflectionPerm1 = gcnew ReflectionPermission( reflection1 );
Console::WriteLine( "********************************************************\n" );
reflectionGen2->ResetIndex();
try
{
reflectionPerm2 = gcnew ReflectionPermission( PermissionState::None );
reflectionPerm2->FromXml( reflectionPerm1->ToXml() );
Console::WriteLine( "Result of ToFromXml = {0}", reflectionPerm2 );
}
catch ( Exception^ e )
{
Console::WriteLine( "ToFromXml failed : {0}{1}", reflectionPerm1, e );
continue;
}
}
return returnValue;
}
public:
// Invoke all demos.
bool runDemo()
{
bool returnCode = true;
bool tempReturnCode;
// Call the IsSubsetOf demo.
if ( tempReturnCode = IsSubsetOfDemo() )
Console::WriteLine( "IsSubsetOf demo completed successfully." );
else
Console::WriteLine( "IsSubsetOf demo failed." );
returnCode = tempReturnCode && returnCode;
// Call the Union demo.
if ( tempReturnCode = UnionDemo() )
Console::WriteLine( "Union demo completed successfully." );
else
Console::WriteLine( "Union demo failed." );
returnCode = tempReturnCode && returnCode;
// Call the Intersect demo.
if ( tempReturnCode = IntersectDemo() )
Console::WriteLine( "Intersect demo completed successfully." );
else
Console::WriteLine( "Intersect demo failed." );
returnCode = tempReturnCode && returnCode;
// Call the Copy demo.
if ( tempReturnCode = CopyDemo() )
Console::WriteLine( "Copy demo completed successfully." );
else
Console::WriteLine( "Copy demo failed." );
returnCode = tempReturnCode && returnCode;
// Call the ToFromXml demo.
if ( tempReturnCode = ToFromXmlDemo() )
Console::WriteLine( "ToFromXml demo completed successfully." );
else
Console::WriteLine( "ToFromXml demo failed." );
returnCode = tempReturnCode && returnCode;
return (returnCode);
}
};
// Test harness.
int main()
{
try
{
ReflectionPermissionDemo^ democase = gcnew ReflectionPermissionDemo;
bool returnCode = democase->runDemo();
if ( returnCode )
{
Console::WriteLine( "ReflectionPermission demo completed successfully." );
Console::WriteLine( "Press the Enter key to exit." );
Console::ReadLine();
System::Environment::ExitCode = 100;
}
else
{
Console::WriteLine( "ReflectionPermission demo failed." );
Console::WriteLine( "Press the Enter key to exit." );
Console::ReadLine();
System::Environment::ExitCode = 101;
}
}
catch ( Exception^ e )
{
Console::WriteLine( "ReflectionPermission demo failed." );
Console::WriteLine( e );
Console::WriteLine( "Press the Enter key to exit." );
Console::ReadLine();
System::Environment::ExitCode = 101;
}
}
import System.*;
import System.Security.*;
import System.Security.Permissions.*;
/** @assembly CLSCompliant(true)
*/
public class ReflectionPermissionDemo
{
// IsSubsetOf determines whether the current permission is a
// subset of the specified permission.
private boolean IsSubsetOfDemo()
{
boolean returnValue = true;
ReflectionPermissionFlag reflection1[] =
new ReflectionPermissionFlag[1] ;
ReflectionPermissionFlag reflection2[] =
new ReflectionPermissionFlag[1] ;
ReflectionPermission reflectionPerm1[] =
new ReflectionPermission[1] ;
ReflectionPermission reflectionPerm2[] =
new ReflectionPermission[1];
ReflectionGenerator reflectionGen1 =
new ReflectionGenerator();
ReflectionGenerator reflectionGen2 =
new ReflectionGenerator();
reflectionGen1.ResetIndex();
while(reflectionGen1.CreateReflection(reflectionPerm1, reflection1)) {
if (reflectionPerm1[0] == null) {
continue ;
}
reflectionGen2.ResetIndex();
Console.WriteLine("***************************************"
+ "*****************\n");
while(reflectionGen2.CreateReflection(
reflectionPerm2, reflection2)) {
if (reflectionPerm2[0] == null) {
continue ;
}
try {
if ( reflectionPerm1[0].IsSubsetOf(reflectionPerm2[0])) {
Console.WriteLine((reflectionPerm1[0].get_Flags()
+ " is a subset of " +
reflectionPerm2[0].get_Flags()));
}
else {
Console.WriteLine((reflectionPerm1[0].get_Flags()
+ " is not a subset of "
+ reflectionPerm2[0].get_Flags()));
}
}
catch(System.Exception e) {
Console.WriteLine(("An exception was "
+ "thrown for subset :" + reflectionPerm1[0] + "\n"
+ reflectionPerm2[0] + "\n" + e));
returnValue = false;
}
}
}
return returnValue ;
} //IsSubsetOfDemo
// Union creates a new permission that is the union of the
// current permission and the specified permission.
private boolean UnionDemo()
{
boolean returnValue = true;
ReflectionPermissionFlag reflection1[] =
new ReflectionPermissionFlag[1];
ReflectionPermissionFlag reflection2[] =
new ReflectionPermissionFlag[1];
ReflectionPermission reflectionPerm1[] =
new ReflectionPermission[1];
ReflectionPermission reflectionPerm2[] =
new ReflectionPermission[1];
IPermission reflectionPerm3;
ReflectionGenerator reflectionGen1 =
new ReflectionGenerator();
ReflectionGenerator reflectionGen2 =
new ReflectionGenerator();
reflectionGen1.ResetIndex();
while(reflectionGen1.CreateReflection(reflectionPerm1, reflection1)) {
if (reflectionPerm1[0] == null) {
continue ;
}
Console.WriteLine("*******************************************"
+ "***************\n");
reflectionGen2.ResetIndex();
while(reflectionGen2.CreateReflection(reflectionPerm2,
reflection2)) {
if (reflectionPerm2[0] == null) {
continue ;
}
reflectionPerm3 =((ReflectionPermission)(
reflectionPerm1[0].Union(reflectionPerm2[0])));
reflectionPerm3 = reflectionPerm1[0].Union(reflectionPerm2[0]);
if (reflectionPerm3 == null) {
Console.WriteLine(("The union of " + reflection1[0]
+ " and " + reflection2[0] + " is null."));
}
else {
Console.WriteLine(("The union of "
+ reflectionPerm1[0].get_Flags() + " and "
+ reflectionPerm2[0].get_Flags() + " = "
+ ((ReflectionPermission)(reflectionPerm3)).
get_Flags().ToString()));
}
}
}
return returnValue ;
} //UnionDemo
// Intersect creates and returns a new permission that is the
// intersection of the current permission and the permission specified.
private boolean IntersectDemo()
{
boolean returnValue = true;
ReflectionPermissionFlag reflection1[] =
new ReflectionPermissionFlag[1];
ReflectionPermissionFlag reflection2[] =
new ReflectionPermissionFlag[1];
ReflectionPermission reflectionPerm1[] =
new ReflectionPermission[1];
ReflectionPermission reflectionPerm2[] =
new ReflectionPermission[1];
ReflectionPermission reflectionPerm3;
ReflectionGenerator reflectionGen1 =
new ReflectionGenerator();
ReflectionGenerator reflectionGen2 =
new ReflectionGenerator();
reflectionGen1.ResetIndex();
while(reflectionGen1.CreateReflection(reflectionPerm1, reflection1)) {
if (reflectionPerm1[0] == null) {
continue ;
}
Console.WriteLine("***************************************"
+ "*******************\n");
reflectionGen2.ResetIndex();
while(reflectionGen2.CreateReflection(reflectionPerm2,
reflection2)) {
if (reflectionPerm2[0] == null) {
continue ;
}
reflectionPerm3 =((ReflectionPermission)(
reflectionPerm1[0].Intersect(reflectionPerm2[0])));
if (reflectionPerm3 != null) {
Console.WriteLine(("The intersection of "
+ reflection1[0] + " and "
+ reflection2[0] + " = "
+ ((ReflectionPermission)(reflectionPerm3)).
get_Flags().ToString()));
}
else {
Console.WriteLine(("The intersection of "
+ reflection1[0] + " and " + reflection2[0]
+ " is null."));
}
}
}
return returnValue ;
} //IntersectDemo
//Copy creates and returns an identical copy of the current permission.
private boolean CopyDemo()
{
boolean returnValue = true;
ReflectionPermissionFlag reflection1[] =
new ReflectionPermissionFlag[1];
ReflectionPermission reflectionPerm1[] =
new ReflectionPermission[1];
ReflectionPermission reflectionPerm2[] =
new ReflectionPermission[1];
ReflectionGenerator reflectionGen1 =
new ReflectionGenerator();
ReflectionGenerator reflectionGen2 =
new ReflectionGenerator();
reflectionGen1.ResetIndex();
while(reflectionGen1.CreateReflection(reflectionPerm1, reflection1)) {
if (reflectionPerm1[0] == null) {
continue ;
}
reflectionGen2.ResetIndex();
Console.WriteLine("*********************************"
+ "***********************\n");
try {
reflectionPerm2[0] =((ReflectionPermission)(
reflectionPerm1[0].Copy()));
Console.WriteLine(("Result of copy = "
+ reflectionPerm2[0].ToString()));
}
catch(System.Exception e){
Console.WriteLine(("Copy failed :"
+ reflectionPerm1[0].ToString() + e));
continue ;
}
}
return returnValue ;
} //CopyDemo
// ToXml creates an XML encoding of the permission and its current state;
// FromXml reconstructs a permission with the specified state from the
// XML encoding.
private boolean ToFromXmlDemo()
{
boolean returnValue = true;
ReflectionPermissionFlag reflection1[] =
new ReflectionPermissionFlag[1];
ReflectionPermission reflectionPerm1[] =
new ReflectionPermission[1];
ReflectionPermission reflectionPerm2[] =
new ReflectionPermission[1];
ReflectionGenerator reflectionGen1 =
new ReflectionGenerator();
ReflectionGenerator reflectionGen2 =
new ReflectionGenerator();
reflectionGen1.ResetIndex();
while(reflectionGen1.CreateReflection(reflectionPerm1, reflection1)) {
if (reflectionPerm1[0] == null) {
continue ;
}
Console.WriteLine("**************************************"
+ "******************\n");
reflectionGen2.ResetIndex();
try {
reflectionPerm2[0] =
new ReflectionPermission(PermissionState.None);
reflectionPerm2[0].FromXml(reflectionPerm1[0].ToXml());
Console.WriteLine(("Result of ToFromXml = "
+ reflectionPerm2[0].ToString()));
}
catch(System.Exception e) {
Console.WriteLine(("ToFromXml failed :"
+ reflectionPerm1[0].ToString() + e));
continue ;
}
}
return returnValue ;
} //ToFromXmlDemo
// Invoke all demos.
public boolean runDemo()
{
boolean returnCode = true;
boolean tempReturnCode;
// Call the IsSubsetOf demo.
if (tempReturnCode = IsSubsetOfDemo()) {
Console.get_Out().WriteLine("IsSubsetOf demo "
+ "completed successfully.");
}
else {
Console.get_Out().WriteLine("IsSubsetOf demo failed.");
}
returnCode = tempReturnCode && returnCode;
// Call the Union demo.
if (tempReturnCode = UnionDemo()) {
Console.get_Out().WriteLine("Union demo completed successfully.");
}
else {
Console.get_Out().WriteLine("Union demo failed.");
}
returnCode = tempReturnCode && returnCode;
// Call the Intersect demo.
if (tempReturnCode = IntersectDemo()) {
Console.get_Out().WriteLine("Intersect demo completed "
+ "successfully.");
}
else {
Console.get_Out().WriteLine("Intersect demo failed.");
}
returnCode = tempReturnCode && returnCode;
// Call the Copy demo.
if (tempReturnCode = CopyDemo()) {
Console.get_Out().WriteLine("Copy demo completed successfully.");
}
else {
Console.get_Out().WriteLine("Copy demo failed.");
}
returnCode = tempReturnCode && returnCode;
// Call the ToFromXml demo.
if (tempReturnCode = ToFromXmlDemo()) {
Console.get_Out().WriteLine("ToFromXml demo completed "
+ "successfully.");
}
else {
Console.get_Out().WriteLine("ToFromXml demo failed.");
}
returnCode = tempReturnCode && returnCode;
return returnCode ;
} //runDemo
// Test harness.
public static void main(String[] args)
{
try {
ReflectionPermissionDemo democase =
new ReflectionPermissionDemo();
boolean returnCode = democase.runDemo();
if (returnCode) {
Console.get_Out().WriteLine("ReflectionPermission "
+ "demo completed successfully.");
Console.get_Out().WriteLine("Press the Enter key to exit.");
String consoleInput = Console.ReadLine();
System.Environment.set_ExitCode(100);
}
else {
Console.get_Out().WriteLine(
"ReflectionPermission demo failed.");
Console.get_Out().WriteLine("Press the Enter key to exit.");
String consoleInput = Console.ReadLine();
System.Environment.set_ExitCode(101);
}
}
catch(System.Exception e) {
Console.get_Out().WriteLine("ReflectionPermission demo failed.");
Console.WriteLine(e.ToString());
Console.get_Out().WriteLine("Press the Enter key to exit.");
String consoleInput = Console.ReadLine();
System.Environment.set_ExitCode(101);
}
} //main
} //ReflectionPermissionDemo
// This class generates ReflectionPermission objects.
class ReflectionGenerator
{
private ReflectionPermissionFlag myReflection[] = {
ReflectionPermissionFlag.AllFlags,
ReflectionPermissionFlag.MemberAccess,
ReflectionPermissionFlag.NoFlags,
ReflectionPermissionFlag.ReflectionEmit,
ReflectionPermissionFlag.TypeInformation};
private int reflectionIndex = 0;
public ReflectionGenerator()
{
ResetIndex();
} //ReflectionGenerator
public void ResetIndex()
{
reflectionIndex = 0;
} //ResetIndex
// CreateReflection creates a ReflectionPermission object.
public boolean CreateReflection(ReflectionPermission reflectionPerm[],
ReflectionPermissionFlag reflection[])
{
if (reflectionIndex >= myReflection.length) {
reflectionPerm[0] = new ReflectionPermission(PermissionState.None);
reflection[0] = ReflectionPermissionFlag.NoFlags;
reflectionIndex++;
return false ;
}
reflection[0] = myReflection[reflectionIndex ++];
try {
reflectionPerm[0] = new ReflectionPermission(reflection[0]);
return true ;
}
catch(System.Exception e){
Console.WriteLine(("Cannot create ReflectionPermission: "
+ reflection[0] + " " + e));
reflectionPerm[0] = new ReflectionPermission(PermissionState.None);
reflection[0] = ReflectionPermissionFlag.NoFlags;
return true ;
}
} //CreateReflection
} //ReflectionGenerator