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 に答える