public void TakeOwnership(string key)
        {
            try
            {
                TokenManipulator.AddPrivilege("SeRestorePrivilege");
                TokenManipulator.AddPrivilege("SeBackupPrivilege");
                TokenManipulator.AddPrivilege("SeTakeOwnershipPrivilege");

                SecurityIdentifier sid     = new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null);
                NTAccount          account = sid.Translate(typeof(NTAccount)) as NTAccount;
                using (var HKLM = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
                    using (var Registry = HKLM.OpenSubKey(key, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.TakeOwnership))
                    {
                        var rs = Registry.GetAccessControl(AccessControlSections.All);
                        rs.SetOwner(account);
                        Registry.SetAccessControl(rs);
                    }
            }
            finally
            {
                TokenManipulator.RemovePrivilege("SeRestorePrivilege");
                TokenManipulator.RemovePrivilege("SeBackupPrivilege");
                TokenManipulator.RemovePrivilege("SeTakeOwnershipPrivilege");
            }
        }
        public void RemoveProtection(string key)
        {
            try
            {
                TokenManipulator.AddPrivilege("SeRestorePrivilege");
                TokenManipulator.AddPrivilege("SeBackupPrivilege");
                TokenManipulator.AddPrivilege("SeTakeOwnershipPrivilege");

                using (var HKLM = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
                    using (var Registry = HKLM.OpenSubKey(key, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.ChangePermissions))
                    {
                        var rs = Registry.GetAccessControl(AccessControlSections.All);
                        rs.SetAccessRuleProtection(true, true);
                        rs.AddAccessRule(new RegistryAccessRule("Users", RegistryRights.FullControl, AccessControlType.Allow));
                        Registry.SetAccessControl(rs);
                    }
            }
            finally
            {
                TokenManipulator.RemovePrivilege("SeRestorePrivilege");
                TokenManipulator.RemovePrivilege("SeBackupPrivilege");
                TokenManipulator.RemovePrivilege("SeTakeOwnershipPrivilege");
            }
        }