RegistrySecurity
Represents the Windows access control security for a registry key. This class cannot be inherited.
using Microsoft.Win32.SafeHandles;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security.Principal;
namespace System.Security.AccessControl
{
[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(0)]
public sealed class RegistrySecurity : NativeObjectSecurity
{
public override Type AccessRightType => typeof(RegistryRights);
public override Type AccessRuleType => typeof(RegistryAccessRule);
public override Type AuditRuleType => typeof(RegistryAuditRule);
public RegistrySecurity()
: base(true, ResourceType.RegistryKey)
{
}
internal RegistrySecurity(SafeRegistryHandle hKey, string name, AccessControlSections includeSections)
: base(true, ResourceType.RegistryKey, hKey, includeSections, _HandleErrorCode, null)
{
}
private static Exception _HandleErrorCode(int errorCode, string name, SafeHandle handle, object context)
{
return _HandleErrorCodeCore(errorCode, name, handle, context);
}
public override AccessRule AccessRuleFactory(IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)
{
return new RegistryAccessRule(identityReference, accessMask, isInherited, inheritanceFlags, propagationFlags, type);
}
public override AuditRule AuditRuleFactory(IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)
{
return new RegistryAuditRule(identityReference, accessMask, isInherited, inheritanceFlags, propagationFlags, flags);
}
internal AccessControlSections GetAccessControlSectionsFromChanges()
{
AccessControlSections accessControlSections = AccessControlSections.None;
if (base.AccessRulesModified)
accessControlSections = AccessControlSections.Access;
if (base.AuditRulesModified)
accessControlSections |= AccessControlSections.Audit;
if (base.OwnerModified)
accessControlSections |= AccessControlSections.Owner;
if (base.GroupModified)
accessControlSections |= AccessControlSections.Group;
return accessControlSections;
}
internal void Persist(SafeRegistryHandle hKey, string keyName)
{
WriteLock();
try {
AccessControlSections accessControlSectionsFromChanges = GetAccessControlSectionsFromChanges();
if (accessControlSectionsFromChanges != 0) {
Persist(hKey, accessControlSectionsFromChanges);
bool flag2 = base.AccessRulesModified = false;
bool flag4 = base.AuditRulesModified = flag2;
bool ownerModified = base.GroupModified = flag4;
base.OwnerModified = ownerModified;
}
} finally {
WriteUnlock();
}
}
public void AddAccessRule(RegistryAccessRule rule)
{
AddAccessRule((AccessRule)rule);
}
public void SetAccessRule(RegistryAccessRule rule)
{
SetAccessRule((AccessRule)rule);
}
public void ResetAccessRule(RegistryAccessRule rule)
{
ResetAccessRule((AccessRule)rule);
}
public bool RemoveAccessRule(RegistryAccessRule rule)
{
return RemoveAccessRule((AccessRule)rule);
}
public void RemoveAccessRuleAll(RegistryAccessRule rule)
{
RemoveAccessRuleAll((AccessRule)rule);
}
public void RemoveAccessRuleSpecific(RegistryAccessRule rule)
{
RemoveAccessRuleSpecific((AccessRule)rule);
}
public void AddAuditRule(RegistryAuditRule rule)
{
AddAuditRule((AuditRule)rule);
}
public void SetAuditRule(RegistryAuditRule rule)
{
SetAuditRule((AuditRule)rule);
}
public bool RemoveAuditRule(RegistryAuditRule rule)
{
return RemoveAuditRule((AuditRule)rule);
}
public void RemoveAuditRuleAll(RegistryAuditRule rule)
{
RemoveAuditRuleAll((AuditRule)rule);
}
public void RemoveAuditRuleSpecific(RegistryAuditRule rule)
{
RemoveAuditRuleSpecific((AuditRule)rule);
}
private static Exception _HandleErrorCodeCore(int errorCode, string name, SafeHandle handle, object context)
{
throw new PlatformNotSupportedException();
}
}
}