Hi,
I'm trying to test permission to access the file system, using
FileIOPermission, but can't seem to get it to work.
See my sample app below, for an app that tries to demand a permission
to read a specified path, and then calls Directory.GetFiles on that
path.
The Demands on FileIOPermissions (I tried 3 variations) all work, and
then when I call Directory.GetFiles an exception is thrown... saying
'request for FileIOPermission failed'!.
(NB: when run in full trust (local path) the Directory.GetFiles runs
successfully).
Can anyone explain how to check for permissions?
Here is the output of the app, when run from an intranet path, with
intranet security level set to 'one step down from full trust':
-------------------------------------------
..
..
..
System.Security.SecurityException: Request for the permission of type
'System.Security.Permissions.FileIOPermission, mscorlib,
Version=2.0.0.0, Cultur
e=neutral, PublicKeyToken=b77a5c561934e089' failed.
at System.Security.CodeAccessSecurityEngine.Check(Obj ect demand,
StackCrawlMark& stackMark, Boolean isPermSet)
at System.Security.CodeAccessPermission.Demand()
at System.IO.Directory.InternalGetFileDirectoryNames( String path,
String userPathOriginal, String searchPattern, Boolean includeFiles,
Boolean incl
udeDirs, SearchOption searchOption)
at System.IO.Directory.GetFiles(String path, String searchPattern,
SearchOption searchOption)
at System.IO.Directory.GetFiles(String path)
at TestTrust.Program.Main(String[] args)
The action that failed was:
Demand
The type of the first permission that failed was:
System.Security.Permissions.FileIOPermission
The Zone of the assembly that failed was:
Intranet
Here is the sample application:
-------------------------------------------
using System;
using System.IO;
using System.Security.AccessControl;
using System.Security.Permissions;
class Program
{
static void Main()
{
try
{
Console.WriteLine(".");
new FileIOPermission(FileIOPermissionAccess.Read, @"c:
\").Demand();
Console.WriteLine(".");
new FileIOPermission(FileIOPermissionAccess.PathDiscov ery,
AccessControlActions.View, @"c:\").Demand();
Console.WriteLine(".");
new FileIOPermission(PermissionState.Unrestricted).Dem and();
Console.WriteLine(".");
Directory.GetFiles(@"c:\");
}
catch (Exception e)
{
Console.WriteLine(e);
}
Console.ReadLine();
}
}