2009-09-14 10 views
2

J'essaie de modifier une clé de registre à laquelle on m'a dit de contrôler si la mise en cache d'écriture est activée sur des disques durs particuliers. La clé doit être: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\IDE\<DiskName>\<SerialNo>\Device Parameters\Disk\UserWriteCacheSettingEcriture dans le registre (HKEY_LOCAL_MACHINE) sous XP

Cependant, je continue d'avoir des problèmes lors de la création de cette clé (car elle n'existe pas par défaut). Si j'essaie d'ouvrir le ...\Device Parameters\Disk\ avec un accès en écriture, j'obtiens une erreur SecurityException; "L'accès au registre demandé n'est pas autorisé". Maintenant, j'ai ajouté le drapeau <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> à mon fichier manifeste afin de m'assurer que j'ai un accès administrateur, mais je n'ai toujours pas de chance.

Toutes les idées seraient géniales!

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; 
    } 
+1

Êtes-vous administrateur sur cette machine? – Vadim

+0

Oui, sur ma machine dev et la machine cible que je suis. – Siyfion

+0

Vous ouvrez la sous-clé de disque avec createsubkey()? – tanascius

Répondre

1

EDIT: Suppression de l'idée de confiance partielle ... il s'est avéré que cela n'avait rien à voir avec le problème.

J'ai essayé votre code et a obtenu la même erreur - avec quelques modifications ça marche:

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); 
     } 
    } 
    } 
} 
+0

Bon, je suis content que ce ne soit pas seulement moi qui ai des problèmes alors! ;) Je vais jeter un coup d'oeil demain! – Siyfion

+0

Je pensais que les paramètres de sécurité ClickOnce ne concernaient que les programmes d'installation ClickOnce de votre application? Bien que même après avoir essayé l'approbation partielle avec RegistryPermission activée et l'approbation totale, l'application lève toujours une exception SecurityException lorsque vous tentez d'ouvrir une clé avec un accès en écriture. – Siyfion

+0

Hm, je ne suis plus vraiment sûr du problème - jetez un oeil à mon code - par rapport au vôtre - avec ou sans sécurité ClickOnce. Ce pourrait donc être la chaîne "Device Parameters \\ Disk \\" qui a causé le problème. S'il vous plaît essayer. – tanascius

2

Je n'ai pas de meilleure suggestion. Essayez de créer une entrée de registre à la main, juste pour vous assurer que vous le pouvez. Assurez-vous ensuite que l'application est en cours d'exécution avec vos informations d'identification. Juste pour éliminer le problème d'autorisation.

+0

Déjà essayé de le créer avec RegEdit et bien sûr cela fonctionne .. Je suis un peu perplexe, il doit être dit. – Siyfion

Questions connexes