首页 文章

授予注册管理机构许可

提问于
浏览
2

我正在授予 NETWORK SERVICE 访问我需要通过我运行的控制台应用程序访问的注册表项的权限 NETWORK SERVICE . 以下是我创建密钥和授予权限的方法 .

Microsoft.Win32.RegistryKey key;
            key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey("SOFTWARE", RegistryKeyPermissionCheck.ReadWriteSubTree);
            RegistrySecurity rs = new RegistrySecurity();
            rs = key.GetAccessControl();
            rs.AddAccessRule(new RegistryAccessRule("NETWORK SERVICE", RegistryRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));
            key.SetAccessControl(rs);
            key = key.CreateSubKey("RM", RegistryKeyPermissionCheck.ReadWriteSubTree);
            key = key.CreateSubKey("CSVExtraction", RegistryKeyPermissionCheck.ReadWriteSubTree);
            key.SetValue("Failure Tally", "0");

但是当我尝试使用以下代码将setValue设置为键时,我收到错误 . 我用来设置值的代码如下 .

Microsoft.Win32.RegistryKey key;
            key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey("SOFTWARE", Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);
            key = key.CreateSubKey("RM", Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);
            key = key.CreateSubKey("CSVExtraction", Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);
key.SetValue("Failure Tally, "1");

但在这里我收到一条错误,说是拒绝访问HKLM / LOCAL MACHINE / SOFTWARE . 但是我使用上面的代码添加了访问规则 . 但是当我去手动检查访问时,访问被添加到WOW6432node .

1 回答

  • 2

    这个问题可以通过进行2次更改来解决1)同时授予权限您的代码:rs.AddAccessRule(新的RegistryAccessRule(“NETWORK SERVICE”,RegistryRights.FullControl,InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,PropagationFlags.InheritOnly,AccessControlType.Allow)) ; key.SetAccessControl(RS);

    将其编辑为:

    rs.AddAccessRule(new RegistryAccessRule("NETWORK SERVICE", RegistryRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
    key.SetAccessControl(rs);
    

    这是为了确保你给出的权限是inge = herited sub trees .

    2)您不需要按键打开键,而是可以通过写入访问所需的键

    string registryFolderStructure =@"SOFTWARE\RM\CSVExtraction";
    key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(registryFolderStructure, Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);
    

相关问题