You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

66 lines
1.8 KiB

using Alphaleonis.Win32.Filesystem;
using System;
using System.Security.AccessControl;
using System.Security.Principal;
namespace Security2
{
public class EffectiveAccess
{
public static EffectiveAccessInfo GetEffectiveAccess(FileSystemInfo item, IdentityReference2 id, string serverName)
{
bool remoteServerAvailable = false;
Exception authzAccessCheckException = null;
var win32 = new Win32();
var fss = new FileSystemSecurity2(item);
var effectiveAccessMask = win32.GetEffectiveAccess(fss.SecurityDescriptor, id, serverName, out remoteServerAvailable, out authzAccessCheckException);
var ace = new FileSystemAccessRule((SecurityIdentifier)id, (FileSystemRights)effectiveAccessMask, AccessControlType.Allow);
return new EffectiveAccessInfo(
new FileSystemAccessRule2(ace, item),
remoteServerAvailable,
authzAccessCheckException);
}
}
public class EffectiveAccessInfo
{
private FileSystemAccessRule2 ace;
private bool fromRemote;
private Exception authzException;
public FileSystemAccessRule2 Ace
{
get { return ace; }
}
public bool FromRemote
{
get { return fromRemote; }
}
public Exception AuthzException
{
get { return authzException; }
}
public bool OperationFailed
{
get
{
return authzException == null ? false : true;
}
}
public EffectiveAccessInfo(FileSystemAccessRule2 ace, bool fromRemote, Exception authzException = null)
{
this.ace = ace;
this.fromRemote = fromRemote;
this.authzException = authzException;
}
}
}