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 :

RegistryKey, accéder au registre d'un autre utilisateur


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut RegistryKey, accéder au registre d'un autre utilisateur
    Bonjour

    Mon programme a besoin de modifier la configuration Registre d'un utilisateur particulier, qui n'est pas celui qui a lancé le programme...

    Concrètement, mon application crée un nouvel utilisateur Windows (Vista ou Seven), ensuite je souhaiterai modifier quelques clés de registre de SON HKEY_CURRENT_USER

    J'ai essayé de taper dans HKEY_USERS/"SID de l'utilisateur que je viens de créer", mais cela ne se répercute pas dans HKEY_CURRENT_USER une fois mon utilisateur connecté...

    Ma question est donc la suivante :

    Peux-t-on utiliser l'"impersonnation" sur la classe RegistryKey ?
    Sinon, comment puis-je faire ?

    Merci,

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Bon, il est effectivement possible d'accéder au regsitre d'un utilisateur différent de l'utilisateur courant en "chargeant sa ruche".

    Dans Regedit, il suffit de selectionnner KHEY_USERS puis de "Charger la ruche..." C:\Users\monutilisateur\NTUSER.DAT" .

    Du coup, en C# il existe les fonctions interop suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public const uint HKEY_USERS = 0x80000003;
     
            [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            public static extern int RegLoadKey(uint hKey, string lpSubKey, string lpFile);
     
            [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            public static extern int RegUnLoadKey(uint hKey, string lpSubKey);
    A utiliser comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RegLoadKey(HKEY_USERS, "Nom_de_la_clé_point_de_montage", "C:\\Users\\monutilisateur\\NTUSER.DAT");
    Ensuite, il suffit d'ouvrir la bonne clé avec les classes classiques RegistryKey.


    Mais forcément, il me reste un probleme... Comme je viens juste de "créer" mon utilisateur, ses fichiers personnels "C:\Users\monutilisateur" n'existe pas encore et n'existeront qu'à sa première connection.... du coup.. je suis bloqué.

    Quelqu'un sait comment forcer la création des fichiers utilisateurs ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Bon, ben j'ai fini par trouvé tout seul comme un grand.

    Toujours en interop, il existe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            [DllImport("userenv.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern bool LoadUserProfile(IntPtr hToken, ref ProfileInfo lpProfileInfo);
    qiu charge le profil de l'utilisateur que l'on vient de "virtuellement" connecté avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
    Si le profil n'existe pas, il se crée tout seul.

    Du coup, le NTUSER.DAT est enfin présent et on peux le charger dans le registre (attention aux privilèges)

    Probleme résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Accéder à un fichier avec un autre utilisateur
    Par Fabii dans le forum VB.NET
    Réponses: 5
    Dernier message: 17/05/2011, 12h10
  2. Réponses: 15
    Dernier message: 07/07/2010, 16h20
  3. [registre] acceder a la config des autres utilisateurs
    Par duplo dans le forum Windows XP
    Réponses: 6
    Dernier message: 19/04/2006, 22h47
  4. Pb : visualiser table d'un autre utilisateur
    Par user_oracle dans le forum Oracle
    Réponses: 12
    Dernier message: 30/11/2004, 17h18
  5. Réponses: 2
    Dernier message: 28/10/2004, 16h54

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