IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

accéder refusé à C:\Windows\System32\OEM et certaines clé de registe


Sujet :

C#

  1. #1
    Membre actif Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Points : 210
    Points
    210
    Par défaut accéder refusé à C:\Windows\System32\OEM et certaines clé de registe
    Bonjour,

    Je fais une petite application qui doit consulter et écrire dans certaines clés de registre
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Registry.LocalMachine, @"SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation", "Manufacturer
    J'ai une erreur (Message = "La référence d'objet n'est pas définie à une instance d'un objet."), j'ai vérifié dans la base de registre et je n'ai pas vu d'erreur


    Je dois aussi renommer sauvegarder des des fichiers et j'ai pas le droit dans les sous dossiers de C:\windows\system32
    par exemple dans : C:\Windows\System32\OEM

    Je lance mon application :
    • normalement
    • en tant qu'administrateur
    • sous la session administrateur (la vraie)


    et toujours pareil

    Si vous avez une idée je suis preneur

    procédure pour écrire dans la base de registre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    public string EcritureKey(RegistryKey ruche, string cle, string valeur, string donnee)
            {
                cle = Convertion(cle);
                valeur = Convertion(valeur);
                donnee = Convertion(donnee);
                string reponse = "";
                if (!CleExiste(ruche, cle))  //la clé n'existe pas, la créer
                {
                    ruche.CreateSubKey(cle);
                    //ruche = Registry.CurrentUser;
                    RegistryKey _key = ruche.OpenSubKey(cle, true);
                    _key.SetValue(valeur, donnee);
                    _key.Close();
                    ruche.Close();
                }
                else  // écrit la donnée
                {
                    RegistryKey _key = ruche.OpenSubKey(cle, true);
                    try
                    {
                        reponse = (string)_key.GetValue(cle).ToString();
                    }
                    catch
                    {
                        _key.SetValue(valeur, donnee);
                        if (reponse == donnee)
                        { reponse = "Ecriture faite"; }
                        else
                        { reponse = "Ecriture échouée"; }
                    }
                    _key.Close();
                    ruche.Close();
                }
                return reponse;
            }
    gestion de fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.IO.File.Move(@"C:\Windows\System32\oem\SystemLogo.bmp", @"C:\Windows\System32\oem\SystemLogo_old.bmp");
                    logo.Save(@"C:\Windows\System32\OEM\SystemLogo.bmp");

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Peut tu transformer ta première ligne de code en code valide stp ?

  3. #3
    Membre actif Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Points : 210
    Points
    210
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reponse = registre.EcritureKey(Registry.LocalMachine, @"SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation", "Manufacturer", "****");
    voici donc ce que j'envois.

    Il s'avère que j'ai plusieurs autres écritures dans la base de registre qui ne fonctionne pas (je suis Administrateur), je suis sous windows 7 Pro


    En ligne de commande via un bat ça fonctionne (Grrrr) en tan qu'administrateur bien sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set key=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation
    reg add "%key%" /v Manufacturer /t REG_SZ /d "*****" /f

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    K, je ne connais pas "Conversion" pour tenter d'exécuter ton code

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    C'est bizarre que tu aies le message d'erreur "La référence d'objet n'est pas définie à une instance d'un objet". Quelle est la ligne qui déclenche cette erreur ? Est-ce que ta variable registre est correctement initialisée (vérifier qu'elle ne vaut pas null)?

    [EDIT] Peut-être que le problème se situe dans Conversion comme suggéré par Eric.

    Citation Envoyé par Speed41 Voir le message
    Il s'avère que j'ai plusieurs autres écritures dans la base de registre qui ne fonctionne pas (je suis Administrateur), je suis sous windows 7 Pro
    Ce n'est pas parce que tu es administrateur que tu peux tout faire sur le poste cible. Il existe certains mécanismes qui empêchent l'écriture dans le registre pour des raisons de sécurité : si un malware ou autre daube du genre t'infecte, elle ne pourra pas directement attaquer le registre - par exemple.

    Pour permettre à ton application d'écrire dans le registre, tu dois faire une demande d'élévation de privilèges via l'UAC. Pour cela il faut utiliser un fichier .manifest. Le principal inconvénient de ce fichier c'est qu'il va élever les privilèges pour l'ensemble de l'application, ce qui peut représenter un certain problème au niveau de la sécurité. Le mieux, c'est d'isoler les opérations dans un process à part, de dédier le .manifest à ce process, et de lancer ce process depuis l'application principale. C'est un peu plus de travail mais ca permet de clairement isoler les opérations à risque.

    Plus d'info sur le fichier manifest ici : Step 6: Create and Embed an Application Manifest (UAC).
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  6. #6
    Membre actif Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Points : 210
    Points
    210
    Par défaut
    je viens de modifier ce code et ça marche un peu mieux

    mais toujours impossible de lire ce clé par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    registre.LectureKey(Registry.LocalMachine, @"SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background", "OEMBackground");
    elle existe bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    public string EcritureKey(RegistryKey ruche, string cle, string valeur, string donnee)
            {
                cle = Convertion(cle);
                valeur = Convertion(valeur);
                donnee = Convertion(donnee);
                string reponse = "";
                if (!CleExiste(ruche, cle))  //la clé n'existe pas, la créer
                {
                    ruche.CreateSubKey(cle);
                    RegistryKey _key = ruche.OpenSubKey(cle, true);
                    _key.SetValue(valeur, donnee);
                    _key.Close();
                    ruche.Close();
                }
                else  // écrit la donnée
                {
                    RegistryKey _key = ruche.OpenSubKey(cle, true);
     
                    try
                    {
                        _key.SetValue(valeur, donnee);
                    }
                    catch (Exception e)
                    { reponse = "Ecriture échouée, " + e.Message; }
     
                    _key.Close();
                    ruche.Close();
                }
                return reponse;
            }

  7. #7
    Membre actif Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Points : 210
    Points
    210
    Par défaut
    oups oublié le code de lecture de la base de registre
    avec comme erreur en lecture : La référence d'objet n'est pas définie à une instance d'un objet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public string LectureKey(RegistryKey ruche, string cle, string valeur)
            {
                cle = Convertion(cle);
                valeur = Convertion(valeur);
                string reponse = "";
                if (CleExiste(ruche, cle))
                {
                    try
                    {
                        RegistryKey _key = ruche.OpenSubKey(cle, true);
                        reponse = (string)_key.GetValue(valeur).ToString();
                        _key.Close();
                        ruche.Close();
                    }
                    catch (Exception er)
                    {
                        reponse = "Erreur, il est possible que le clé n'existe pas ou n'est pas accessible "+er.Message;
                    }
                }
                else { reponse = "La clé :" + ruche + "/" + cle + "   n'existe pas"; }
                return reponse;
            }

  8. #8
    Membre actif Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Points : 210
    Points
    210
    Par défaut
    Je me doute que je n'ai pas tous les droits pour une raison de sécurité. Je n'ai pas touché le .manifest mais baissé au minimum l'UAC. Je ne me vois pas baisser la sécurité encore plus bas, surtout que ced programme doit me permettre de contrôler la configuration des PC de mon parc (env. 100). Mais une erreur de droit me conviendrais bien mieux que celle ci

    J'ai l'erreur au moment de lire la clé ou d'écrire, ma variable _key n'est pas null.

    Je viens de faire un test sur la conversion et ça ne change rien, je lit d'autres reg_dword sans problème

  9. #9
    Membre actif Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Points : 210
    Points
    210
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RegistryKey _key = ruche.OpenSubKey(cle, true);
    var lareponse = _key.GetValue(valeur);
    _key est conforme à mon attente (_key = {HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background}
    copié de la base de registre HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background
    valeur : est bien celle que j'ai demandé (OEMBackground)
    lareponse=null

    la clé existe bien pourtant

    Donc oui l'erreur vient de la conversion et non de la lecture de la donnée. Mais pourquoi est elle null alors qu'elle existe ???

  10. #10
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Que vaut val1 si tu exécute ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object val1 = (Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation")).GetValue("Manufacturer");

  11. #11
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    ---> Concernant tes problèmes liés au registre :

    1- Dans les propriétés de ton projet l'unité centrale cible est-elle en AnyCPU, x64, x86 ?

    2- Le système d'exploitation depuis lequel tu développes est-il en x64 bits ?

    3- Si oui aux 2 questions : As-tu connaissance du fonctionnement de la redirection du registre à cet embranchement pour les applications exécutée en mode compatibilité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
    A+

  12. #12
    Membre actif Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Points : 210
    Points
    210
    Par défaut
    Bonjour

    Je suis bien en 64 bits et en AnyCPU
    Je ne connais pas la redirection dans le registre, mais mon appli doit pouvoir fonctionner aussi sur un 32 bits.
    Mais cela change quoi pour moi, normalement c'est "transparent" ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object val1 = (Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation")).GetValue("Manufacturer");
    Je test dés que j'ai un moment, (je viens de reprendre le travail, même si c'est pour le travail, la programmation reste secondaire dans mes tâches)

    Merci pour votre aide

  13. #13
    Membre actif Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Points : 210
    Points
    210
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object val1 = (Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation")).GetValue("Manufacturer");
    Donne la bonne réponse.
    Je vais donc revoir ma méthode de lecture de base de registre et aussi l'écriture

    Merci

Discussions similaires

  1. Créer une dll enregistrable avec c:\WINDOWS\system32\regsvr32.exe
    Par Immobilis dans le forum Général Dotnet
    Réponses: 13
    Dernier message: 09/03/2009, 21h37
  2. Réponses: 2
    Dernier message: 16/11/2006, 17h09
  3. [A supprimer]Ouverture automatique de C:\windows\system32
    Par arnaud_verlaine dans le forum Windows XP
    Réponses: 4
    Dernier message: 26/09/2006, 14h59
  4. Réponses: 6
    Dernier message: 01/08/2006, 16h28
  5. Erreur fichier"\windows\system32\config\system" in
    Par mzt.insat dans le forum Windows XP
    Réponses: 3
    Dernier message: 22/02/2006, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo