[Serializable] |
All these permissions are independent, meaning that rights to one do not imply rights to another. For example, Write permission does not imply permission to Read or Append. If more than one permission is desired, they can be combined using a bitwise OR as shown in the code example that follows. File permission is defined in terms of canonical absolute paths; calls should always be made with canonical file paths.
FileIOPermission describes protected operations on files and folders. The File class provides secure access to files and folders. The security access check is performed when the handle to the file is created. By doing the check at creation time, the performance impact of the security check is minimized. Opening a file happens once, while reading and writing can happen multiple times. Once the file is opened, no further checks are done. If the object is passed to an untrusted caller, it can be misused. For example, file handles should not be stored in public global statics where code with less permission can access them.
FileIOPermissionAccess specifies actions that can be performed on the file or folder. In addition, these actions can be combined using a bitwise OR to form complex instances.
Access to a folder implies access to all the files it contains, as well as access to all the files and folders in its subfolders. For example, Read access to C:\folder1\ implies Read access to C:\folder1\file1.txt, C:\folder1\folder2\, C:\folder1\folder2\file2.txt, and so on.
Unrestricted FileIOPermission to a specified file effectively grants permission for all paths within a file system that can be used to access that file. To CodeAccessPermission.Deny access to a file, you must Deny all possible paths to the file. For example, if \\server\share is mapped to the network drive X, to Deny access to \\server\share\file you must Deny \\server\share\file, X:\file, and any other path that you can use to access the file.
f
represents permission to read all files on the client computer's local disks.FileIOPermission f = new FileIOPermission(PermissionState.None); f.AllLocalFiles = FileIOPermissionAccess.Read;
After the following two lines of code, the object
f2
represents permissions to read C:\test_r and read and write to C:\example\out.txt.Read and Write represent the file/folder permissions as previously described.
FileIOPermission f2 = new FileIOPermission(FileIOPermissionAccess.Read, "C:\\test_r"); f2.AddPathList(FileIOPermissionAccess.Write | FileIOPermissionAccess.Read, "C:\\example\\out.txt");
ctor #1 | Overloaded:.ctor(PermissionState state) Initializes a new instance of the FileIOPermission class with fully-restricted or unrestricted permission as specified. |
ctor #2 | Overloaded:.ctor(FileIOPermissionAccess access, string path) Initializes a new instance of the FileIOPermission class with the specified access to the specified file or directory. |
ctor #3 | Overloaded:.ctor(FileIOPermissionAccess access, string[] pathList) Initializes a new instance of the FileIOPermission class with the specified access to the specified files and directories. |
AllFiles | Read-write Gets or sets the permitted access to all files. |
AllLocalFiles | Read-write Gets or sets the permitted access to all local files. |
AddPathList | Overloaded:AddPathList(FileIOPermissionAccess access, string path) Adds access for the specified file or directory to the existing state of the permission. |
AddPathList | Overloaded:AddPathList(FileIOPermissionAccess access, string[] pathList) Adds access for the specified files and directories to the existing state of the permission. |
Assert (inherited from System.Security.CodeAccessPermission) |
See base class member description: System.Security.CodeAccessPermission.Assert Asserts that calling code can access the resource identified by the current permission through the code that calls this method, even if callers higher in the stack have not been granted permission to access the resource. |
Copy | Overridden: Creates and returns an identical copy of the current permission. |
Demand (inherited from System.Security.CodeAccessPermission) |
See base class member description: System.Security.CodeAccessPermission.Demand Forces a SecurityException at run time if all callers higher in the call stack have not been granted the permission specified by the current instance. |
Deny (inherited from System.Security.CodeAccessPermission) |
See base class member description: System.Security.CodeAccessPermission.Deny Prevents callers higher in the call stack from using the code that calls this method to access the resource specified by the current instance. |
Equals (inherited from System.Object) |
See base class member description: System.Object.Equals Derived from System.Object, the primary base class for all objects. |
FromXml | Overridden: Reconstructs a permission with a specified state from an XML encoding. |
GetHashCode (inherited from System.Object) |
See base class member description: System.Object.GetHashCode Derived from System.Object, the primary base class for all objects. |
GetPathList | Gets all files and directories with the specified FileIOPermissionAccess. |
GetType (inherited from System.Object) |
See base class member description: System.Object.GetType Derived from System.Object, the primary base class for all objects. |
Intersect | Overridden: Creates and returns a permission that is the intersection of the current permission and the specified permission. |
IsSubsetOf | Overridden: Determines whether the current permission is a subset of the specified permission. |
IsUnrestricted | Returns a value indicating whether the current permission is unrestricted. |
PermitOnly (inherited from System.Security.CodeAccessPermission) |
See base class member description: System.Security.CodeAccessPermission.PermitOnly Prevents callers higher in the call stack from using the code that calls this method to access all resources except for the resource specified by the current instance. |
SetPathList | Overloaded:SetPathList(FileIOPermissionAccess access, string path) Sets the specified access to the specified file or directory, replacing the existing state of the permission. |
SetPathList | Overloaded:SetPathList(FileIOPermissionAccess access, string[] pathList) Sets the specified access to the specified files and directories, replacing the current state for the specified access with the new set of paths. |
ToString (inherited from System.Security.CodeAccessPermission) |
See base class member description: System.Security.CodeAccessPermission.ToString Creates and returns a string representation of the current permission object. |
ToXml | Overridden: Creates an XML encoding of the permission and its current state. |
Union | Overridden: Creates a permission that is the union of the current permission and the specified permission. |
Finalize (inherited from System.Object) |
See base class member description: System.Object.Finalize Derived from System.Object, the primary base class for all objects. |
MemberwiseClone (inherited from System.Object) |
See base class member description: System.Object.MemberwiseClone Derived from System.Object, the primary base class for all objects. |
Hierarchy:
public FileIOPermission( |
state
Exception Type | Condition |
---|---|
ArgumentException | The state parameter is not a valid value of PermissionState. |
public FileIOPermission(FileIOPermission( |
access
path
Exception Type | Condition |
---|---|
ArgumentException | The access parameter is not a valid value of FileIOPermissionAccess. -or- The path parameter is not a valid string. |
public FileIOPermission(FileIOPermission( |
access
pathList
Exception Type | Condition |
---|---|
ArgumentException | The access parameter is not a valid value of FileIOPermissionAccess. -or- An entry in the pathList array is not a valid string. |
public FileIOPermissionAccess AllFiles {get; set;}
|
An individual FileIOPermissionAccess value can be checked for using a bitwise AND operation.
public FileIOPermissionAccess AllLocalFiles {get; set;}
|
An individual FileIOPermissionAccess value can be checked for using a bitwise AND operation.
public void AddPathList( |
access
path
Exception Type | Condition |
---|---|
ArgumentException | The access parameter is not a valid value of FileIOPermissionAccess. -or- The path parameter is not valid. |
ArgumentNullException | The path parameter is null. |
public void AddPathList( |
access
pathList
Exception Type | Condition |
---|---|
ArgumentException | The access parameter is not a valid value of FileIOPermissionAccess. -or- An entry in the pathList array is not valid. |
ArgumentNullException | The pathList parameter is null. |
public void Assert(); |
Exception Type | Condition |
---|---|
SecurityException | The calling code does not have SecurityPermissionFlag.Assertion. -or- There is already an active CodeAccessPermission.Assert for the current frame. |
The call to CodeAccessPermission.Assert is effective until the calling code returns to its caller. Only one CodeAccessPermission.Assert can be active on a frame. An attempt to call CodeAccessPermission.Assert when an active CodeAccessPermission.Assert exists on the frame results in a SecurityException. Call CodeAccessPermission.RevertAssert or CodeAccessPermission.RevertAll to remove an active CodeAccessPermission.Assert.
CodeAccessPermission.Assert is ignored for a permission not granted because a demand for that permission will not succeed. However, if code lower on the call stack calls CodeAccessPermission.Demand for that permission, a SecurityException is thrown when the stack walk reaches the code that tried to call CodeAccessPermission.Assert. This happens because the code that called CodeAccessPermission.Assert has not been granted the permission, even though it tried to CodeAccessPermission.Assert it.
Because calling CodeAccessPermission.Assert removes the requirement that all code in the call chain must be granted permission to access the specified resource, it can open up security vulnerabilities if used incorrectly or inappropriately. Therefore, it should be used with great caution.
public override IPermission Copy(); |
public void Demand(); |
Exception Type | Condition |
---|---|
SecurityException | A caller higher in the call stack does not have the permission specified by the current instance. -or- A caller higher in the call stack has called CodeAccessPermission.Deny on the current permission object. |
The permissions of the code that calls this method are not examined; the check begins from the immediate caller of that code and proceeds up the stack. The call stack is typically represented as growing down, so that methods higher in the call stack call methods lower in the call stack. CodeAccessPermission.Demand succeeds only if no SecurityException is raised.
public void Deny(); |
Exception Type | Condition |
---|---|
SecurityException | There is already an active CodeAccessPermission.Deny for the current frame. |
CodeAccessPermission.Deny can limit the liability of the programmer or prevent accidental security vulnerabilities because it prevents the method that calls CodeAccessPermission.Deny from being used to access the resource protected by the denied permission. If a method calls CodeAccessPermission.Deny on a permission, and if a CodeAccessPermission.Demand for that permission is invoked by a caller lower in the call stack, that security check will fail when it reaches the CodeAccessPermission.Deny.
The call to CodeAccessPermission.Deny is effective until the calling code returns to its caller. Only one CodeAccessPermission.Deny can be active on a frame. An attempt to call CodeAccessPermission.Deny when an active CodeAccessPermission.Deny exists on the frame results in a SecurityException. Call CodeAccessPermission.RevertDeny or CodeAccessPermission.RevertAll to remove an active CodeAccessPermission.Deny. CodeAccessPermission.Deny is ignored for a permission not granted because a demand for that permission will not succeed.
~FileIOPermission(); |
public override void FromXml( |
esd
Exception Type | Condition |
---|---|
ArgumentNullException | The esd parameter is null. |
ArgumentException | The esd parameter is not a valid permission element. -or- The esd parameter's version number is not compatible. |
public virtual int GetHashCode(); |
public string[] GetPathList( |
access
Exception Type | Condition |
---|---|
ArgumentException | The access parameter is not a valid value of FileIOPermissionAccess. |
public Type GetType(); |
public override IPermission Intersect( |
target
Exception Type | Condition |
---|---|
ArgumentException | The target parameter is not null and is not of the same type as the current permission. |
public override bool IsSubsetOf( |
target
Exception Type | Condition |
---|---|
ArgumentException | The target parameter is not null and is not of the same type as the current permission. |
public bool IsUnrestricted(); |
protected object MemberwiseClone(); |
public void PermitOnly(); |
Exception Type | Condition |
---|---|
SecurityException | There is already an active CodeAccessPermission.PermitOnly for the current frame. |
Call this method to ensure that your code can be used to access only the specified resources. The call to CodeAccessPermission.PermitOnly is effective until the calling code returns to its caller. Only one CodeAccessPermission.PermitOnly can be active on a frame. An attempt to call CodeAccessPermission.PermitOnly when an active CodeAccessPermission.PermitOnly exists on the frame results in a SecurityException. Call CodeAccessPermission.RevertPermitOnly or CodeAccessPermission.RevertAll to remove an active CodeAccessPermission.PermitOnly.
CodeAccessPermission.PermitOnly is ignored for a permission not granted because a demand for that permission will not succeed. However, if code lower on the call stack later calls CodeAccessPermission.Demand for that permission, a SecurityException is thrown when the stack walk reaches the code that tried to call CodeAccessPermission.PermitOnly. This is because the code that called CodeAccessPermission.PermitOnly has not been granted the permission, even though it called CodeAccessPermission.PermitOnly for that permission. The call stack is typically represented as growing down, so that methods higher in the call stack call methods lower in the call stack.
public void SetPathList( |
access
path
Exception Type | Condition |
---|---|
ArgumentException | The access parameter is not a valid value of FileIOPermissionAccess. -or- The path parameter is not a valid string. |
SetPathList(FileIOPermissionAccess.Read, "C:\\temp");
This access will not be overwritten by the following code because the access types are not the same.
SetPathList(FileIOPermissionAccess.Write, "C:\\documents");
public void SetPathList( |
access
pathList
Exception Type | Condition |
---|---|
ArgumentException | The access parameter is not a valid value of FileIOPermissionAccess. -or- An entry in the pathList parameter is not a valid string. |
SetPathList(FileIOPermissionAccess.Read, "C:\\temp");
This access will not be overwritten by the following code because the access types are not the same.
SetPathList(FileIOPermissionAccess.Write, "C:\\documents");
public override string ToString(); |
public override SecurityElement ToXml(); |
public override IPermission Union( |
other
Exception Type | Condition |
---|---|
ArgumentException | The other parameter is not null and is not of the same type as the current permission. |