mirror of https://github.com/raandree/NTFSSecurity
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
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;
|
|
}
|
|
}
|
|
}
|