Source code for RequestRefuse / RequestOptional

Here is the source code for the blog on using RequestRefuse and RequestOptional.

Refuse.cs:


using System;
using System.IO;
using System.Security.Permissions;
using System.Windows.Forms;

// Let us show MessageBox windows
[assembly:UIPermission(SecurityAction.RequestMinimum, Window=UIPermissionWindow.SafeSubWindows)]

// Refuse access to the Environment
[assembly:EnvironmentPermission(SecurityAction.RequestRefuse, Unrestricted=true)]

namespace Refuse
{
  public class RefuseTest
  {

    public string ReturnAString()
    {
      return "Hello from " + this.GetType().Name;
    }

    public void ShowMessageBox()
    {
      MessageBox.Show("Hello from " + this.GetType().Name);
    }

    public string GetUsername()
    {
      return Environment.UserName;
    }

    public string ReadFile()
    {
      StreamReader sr = File.OpenText("c:\temp\test.txt");
      string result = sr.ReadToEnd();
      sr.Close();
      return result;
    }
  }
}


Optional.cs:


using System;
using System.IO;
using System.Security.Permissions;
using System.Windows.Forms;

// Let us show MessageBox windows
[assembly:UIPermission(SecurityAction.RequestMinimum, Window=UIPermissionWindow.SafeSubWindows)]

// Nothing else is required
[assembly:PermissionSet(SecurityAction.RequestOptional, Name="Execution")]

namespace Optional
{
 public class OptionalTest
 {
    public string ReturnAString()
    {
      return "Hello from " + this.GetType().Name;
    }

    public void ShowMessageBox()
    {
      MessageBox.Show("Hello from " + this.GetType().Name);
    }

    public string GetUsername()
    {
      return Environment.UserName;
    }
 
    public string ReadFile()
    {
      StreamReader sr = File.OpenText("c:\temp\test.txt");
      string result = sr.ReadToEnd();
      sr.Close();
      return result;
    }
  }
}


Main.cs:


using System;
using Optional;
using Refuse;

namespace RequestDemoForBlog
{
 class Class1
 {
    [STAThread]
    static void Main(string[] args)
    {
      TestOptional();
      Console.WriteLine("rnrn----------rn");
      TestRefuse();
    }

    static void TestOptional()
    {
      OptionalTest t = new OptionalTest();
      Console.WriteLine("Optional tests:rn");

      Console.WriteLine("rnBasic execution:");
      try  { Console.WriteLine(t.ReturnAString()); }
      catch(Exception ex) { Console.WriteLine(ex.Message); }
     
      Console.WriteLine("rnMessageBox:");
      try  { t.ShowMessageBox(); }
      catch(Exception ex) { Console.WriteLine(ex.Message); }
     
      Console.WriteLine("rnEnvironment:");
      try  { Console.WriteLine(t.GetUsername()); }
      catch(Exception ex) { Console.WriteLine(ex.Message); }
     
      Console.WriteLine("rnFile IO:");
      try  { Console.WriteLine(t.ReadFile()); }
      catch(Exception ex) { Console.WriteLine(ex.Message); }
    }

    static void TestRefuse()
    {
      RefuseTest t = new RefuseTest();
      Console.WriteLine("Refuse tests:rn");

      Console.WriteLine("rnBasic execution:");
      try  { Console.WriteLine(t.ReturnAString()); }
      catch(Exception ex) { Console.WriteLine(ex.Message); }
     
      Console.WriteLine("rnMessageBox:");
      try  { t.ShowMessageBox(); }
      catch(Exception ex) { Console.WriteLine(ex.Message); }
     
      Console.WriteLine("rnEnvironment:");
      try  { Console.WriteLine(t.GetUsername()); }
      catch(Exception ex) { Console.WriteLine(ex.Message); }
     
      Console.WriteLine("rnFile IO:");
      try  { Console.WriteLine(t.ReadFile()); }
      catch(Exception ex) { Console.WriteLine(ex.Message); }
    }
  }
}


Build.bat:


@echo off
csc /nologo /t:library Optional.cs
csc /nologo /t:library Refuse.cs
csc /nologo /r:refuse.dll,optional.dll main.cs
echo.
echo Done!