0

我想检查以下键的值:-

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges\Range1] 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges\Range2]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges\Range3]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges\Range4]

这是必需的,因为当我运行一个名为“securityNT.reg”的 .reg 文件时,该文件是我项目的先决条件,它会更新这些键的值。我知道这些密钥包含受信任站点的值。

我正在使用以下代码来获取这些值:

bool flagIESettings = false;
    string strKeyIESettings = @"Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges";
    string valRange1 = "", valRange2 = "", valRange3 = "", valRange4 = "";
    using (Microsoft.Win32.RegistryKey keyIESettings = Registry.CurrentUser.OpenSubKey(strKeyIESettings))
      {
        foreach (string subkey_name in keyIESettings.GetSubKeyNames())
          {
            using (RegistryKey subkey = keyIESettings.OpenSubKey(subkey_name))
             {
               switch (subkey_name)
                 {
                  case "Range1" :
                     if (subkey.GetValue(":Range") != null)
                      {
                         valRange1 = subkey.GetValue(":Range").ToString();
                      }                                
                       break;

                        case "Range2" :
                            if (subkey.GetValue(":Range") != null)
                            {
                                valRange2 = subkey.GetValue(":Range").ToString();
                            }                                
                            break;

                        case "Range3":
                            if (subkey.GetValue(":Range") != null)
                            {
                                valRange3 = subkey.GetValue(":Range").ToString();
                            }
                            break;

                        case "Range4":
                            if (subkey.GetValue(":Range") != null)
                            {
                                valRange4 = subkey.GetValue(":Range").ToString();
                            }
                            break;

                        default:
                            break;
                    }
                }
            }
        }

        if (valRange1 == "10.237.24.165" && valRange2 == "10.237.24.166" && valRange3 == "10.237.24.167" && valRange4 == "10.237.24.168")
        {
            flagIESettings = true;
        } 

我正在使用 Registry.CurrentUser 来获取值,HKEY_CURRENT_USER但是这个对象(keyIESettings)正在从HKEY_USERS\S-1-5-20. 这是我想从中获取值HKEY_CURRENT_USER但从 HKEY_USERS\S-1-5-20 获取值的主要问题。

我观察到HKEY_CURRENT_USERHKEY_USERS\S-1-5-21-507921405-1993962763-682003330-1014我的机器上是同步的,可能是因为它是当前用户。如果对象从中获取值,HKEY_USERS\S-1-5-21-507921405-1993962763-682003330-1014那么我的目的就完成了。请让我知道如何从HKEY_CURRENT_USERHKEY_USERS\S-1-5-21-507921405-1993962763-682003330-1014

4

1 回答 1

1

你自己说过你可以从中获得价值HKEY_CURRENT_USER,你只是没有得到你期望/想要的价值。

HKEY_CURRENT_USER是注册表中的一个虚拟链接,指向当前登录的用户的键(因此得名)。正如您所指出的,当您登录时,它会“同步”到HKEY_USERS\S-1-5-21-507921405-1993962763-682003330-1014.

HKEY_USERS\S-1-5-20是“网络服务”用户(请参阅此处了解众所周知的 ID 列表)。我猜想您正在将程序作为服务运行(IIS 下的网站或 Windows 服务)。

在这种情况下,您将不会(或至少不应该)有权访问本地用户的注册表配置单元。您需要以您打算编辑的用户(或可能作为本地用户)的身份运行您的应用程序才能访问它。

于 2012-10-23T15:27:04.787 回答