class NetDirectorySecurity : NativeObjectSecurity
{
public NetDirectorySecurity(string ResName, AccessControlSections IncludeSections)
: base(true, ResourceType.LMShare, ResName, IncludeSections)
{
}
private static FileSystemRights RightsFromAccessMask(int accessMask)
{
return (FileSystemRights)accessMask;
}
public sealed override AccessRule AccessRuleFactory(IdentityReference identityReference, int accessMask,
bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)
{
return new FileSystemAccessRule(identityReference, RightsFromAccessMask(accessMask), inheritanceFlags, propagationFlags, type);
}
public sealed override AuditRule AuditRuleFactory(IdentityReference identityReference, int accessMask,
bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)
{
return new FileSystemAuditRule(identityReference, RightsFromAccessMask(accessMask), inheritanceFlags, propagationFlags, flags);
}
public override Type AccessRightType { get { return typeof(FileSystemRights); } }
public override Type AccessRuleType { get { return typeof(FileSystemAccessRule); } }
public override Type AuditRuleType { get { return typeof(FileSystemAuditRule); } }
}
NetDirectorySecurity nds = new NetDirectorySecurity(sharedName, AccessControlSections.Audit);
var permissions = nds.GetAuditRules(true, true, typeof(SecurityIdentifier));
FileSystemRights failRights = 0;
FileSystemRights successRights = 0;
FileSystemRights noneRights = 0;
var auditRules = permissions.Cast<FileSystemAuditRule>().Where(ar => ar.IdentityReference.Value == sid).ToList();
if (auditRules.Count == 0)
{
successfullAuditMask = 0;
failedAuditMask = 0;
}
var auditFlagsValues = Enum.GetValues(typeof(AuditFlags));
foreach (var auditRule in auditRules)
{
var closureRule = auditRule;
foreach (AuditFlags value in auditFlagsValues.Cast<AuditFlags>().Where(value => (closureRule.AuditFlags & value) == value))
{
switch (value)
{
case AuditFlags.Failure:
failRights |= auditRule.FileSystemRights;
break;
case AuditFlags.Success:
successRights |= auditRule.FileSystemRights;
break;
case AuditFlags.None:
noneRights |= auditRule.FileSystemRights;
break;
}
}
}
successfullAuditMask = (int)successRights;
failedAuditMask = (int)failRights;
Комментариев нет:
Отправить комментарий