2

我正在尝试修改我被告知控制是否在特定硬盘驱动器上启用写缓存的注册表项。关键应该是:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\IDE\<DiskName>\<SerialNo>\Device Parameters\Disk\UserWriteCacheSetting

但是,在尝试创建此密钥时我一直遇到问题(因为默认情况下它不存在)。如果我尝试打开...\Device Parameters\Disk\具有写入权限的权限,则会收到 SecurityException 错误;“不允许请求的注册表访问”。现在我已将<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />标志添加到我的清单文件中,以确保我具有管理员访问权限,但我仍然没有任何运气。

任何想法都会很棒!

    static void Main(string[] args)
    {
        RegistryKey myKey = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Enum\\IDE\\");

        foreach (string driveManafacturer in myKey.GetSubKeyNames())
        {
            RegistryKey driveKey = myKey.OpenSubKey(driveManafacturer);
            foreach (string driveID in driveKey.GetSubKeyNames())
            {
                RegistryKey driveIDKey = driveKey.OpenSubKey(driveID, true);
                string driveType = (string)driveIDKey.GetValue("Class");
                if (driveType == "DiskDrive")
                {
                    RegistryKey tempKey = driveIDKey.OpenSubKey("Device Parameters\\Disk\\", true);
                    if (tempKey == null)
                    {
                        tempKey = driveIDKey.CreateSubKey("Device Parameters\\Disk\\");
                        tempKey.SetValue("UserWriteCacheSetting", 0x0);
                    }
                }
            }
        }

        return;
    }
4

2 回答 2

2

我没有更好的建议。尝试手动创建注册表项,以确保可以。然后确保应用程序正在使用您的凭据运行。只是为了消除权限问题。

于 2009-09-14T11:53:07.033 回答
1

编辑:删除了关于部分信任的想法......结果证明它与问题无关。

我尝试了您的代码并得到了同样的错误 - 经过一些修改它可以工作:

RegistryKey myKey = Registry.LocalMachine.OpenSubKey( "SYSTEM\\CurrentControlSet\\Enum\\IDE\\" );

foreach( string driveManafacturer in myKey.GetSubKeyNames() )
{
  RegistryKey driveKey = myKey.OpenSubKey( driveManafacturer );

  foreach( string driveID in driveKey.GetSubKeyNames() )
  {
    RegistryKey subKey = driveKey.OpenSubKey( driveID );
    string driveType = (string)subKey.GetValue( "Class" );
    if( driveType == "DiskDrive" )
    {
      RegistryKey tempKey = subKey.OpenSubKey( "Device Parameters", true );
      RegistryKey tempKey2 = tempKey.OpenSubKey( "Disk" );
      if( tempKey2 == null )
      {
        tempKey2 = tempKey.CreateSubKey( "Disk" );
        tempKey2.SetValue( "UserWriteCacheSetting", 0x0 );
      }
    }
  }
}
于 2009-09-14T15:11:01.923 回答