[R] RegRead et actualisation de la Base de Registre...

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Gnifrus
Niveau 4
Niveau 4
Messages : 81
Enregistré le : mar. 14 juil. 2009 13:48
Localisation : Montauban
Status : Hors ligne

[R] RegRead et actualisation de la Base de Registre...

#1

Message par Gnifrus »

Bonjour,

Encore un problème à vous soumettre :
J'ai écrit un script qui fait les choses suivantes (entre autre, mais je simplifie pour en venir à mon problème :) ) :

1 - lecture de la valeur "Logon User Name" (RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer","Logon User Name") qui permet de récupérer le nom de l'utilisateur de la session, par exemple "toto"
2 - Je ferme le process "explorer.exe", et le relance en tant qu'administrateur (RunAs($administrateur,$Domaine&".DOM",$password,1,"explorer.exe")
3 - Je lis à nouveau la valeur "Logon User Name" (RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer","Logon User Name") pour vérifier que le nom de l'utilisateur de la session a bien changé.

Le problème est que en 3, il m'est retourné la valeur de "toto", alors que lorsque je vais explorer moi-même la base de registre, je lis la valeur "administrateur" dans le "Logon User Name". Un peu comme si le script lisait toujours l'ancienne valeur ?!

Je précise avoir essayé des choses trouvées sur le forum comme : EnvUpdate(), AutoItSetOption ("ExpandEnvStrings", 1), @userName sans succès...
Pourtant, si je vais dans une fenêtre en ligne de commande et que je tape SET, il m'est bien indiqué en face de UserName : administrateur

Je ne pige pas...
Quelqu'un pour m'aider ?

Merci d'avance !
Bonne journée,

Gnifrus.
Modifié en dernier par Gnifrus le lun. 15 avr. 2013 17:21, modifié 1 fois.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] RegRead et actualisation de la Base de Registre...

#2

Message par jchd »

C'est pour quelle version de Windows ?

Cette clé n'existe plus sous seven. Utiliser alors "HKCU\Volatile Environment\USERNAME"

Il semblerait que ton programme hérite de l'environnement qui l'a lancé et le %username% d'alors valait bien "toto". Quand tu lances cmd ensuite, il hérite du nouvel environnement créé par la nouvelle instance administrateur, donc tu y lis bien le nouveau logon.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Gnifrus
Niveau 4
Niveau 4
Messages : 81
Enregistré le : mar. 14 juil. 2009 13:48
Localisation : Montauban
Status : Hors ligne

Re: [..] RegRead et actualisation de la Base de Registre...

#3

Message par Gnifrus »

Merci jchd,

La clé "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer","Logon User Name" existe dans Windows XP.

Je précise qu'avant d'exécuter mon script, la valeur (en allant voir directement dans la base de registre avec regedit) de cette clé est "toto", et après, elle est égale à "administrateur".

C'est juste que dans le script, après avoir relancé le processus explorer.exe en tant qu'administrateur, le code RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer","Logon User Name") ne donne pas la vraie valeur de cette clé, mais celle qui existait avant l'exécution de ce script.

C'est pour celà que je ne pige pas. Je comprends ton explication avec cmd et l'héritage du nouvel environnement, mais lorsque la clé du registre a pour valeur "administrateur", la lecture de cette clé au moyen de RegRead devrait me renvoyer "administrateur" et pas "toto" ?!

Merci quand même,
Je recherche maintenant à contourner ce problème en utilisant la commande "Run(@ComSpec & ' /c ' & 'SET username > D:\test.txt') mais à part créer un fichier comme "test.txt" pour aller ensuite lire la valeur à droite de USERNAME=, je ne vois pas comment je pourrais récupérer ça directement dans une variable...

J'ai aussi essayé de passer par des script windows, sans succès....

Peut-être devrais-je relancer autre chose que le process explorer.exe en tant qu'administrateur pour relancer une vrai session de windows ?

@bientôt,

Gnifrus.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] RegRead et actualisation de la Base de Registre...

#4

Message par jchd »

Je ne sais pas trop mais sous XP cette clé est peut-être virtualisée. Sinon ça serait un gros trou de sécurité : tu lances un prog en user simple avec des droits limités, on (par n'importe quel moyen) lance un explorer en admin et hop, ton prog passerait en user admin ? Et il aurait d'un coup les droits admin ? Bigre !
Si oui, problème, si non, l'environnement n'est plus cohérent.

Donc pour moi, c'est l'ancien environnement user (et droits) qui est conservé et qui masque le reste.

Je dis ça mais c'est peut-être autre chose, hein. Le voies de Windows sont souvent impénétrables.

Pour récupérer %username% tu peux capter stdout directement sans passer par un fichier.

EDIT : pour vérifier la théorie concernant la clé, dans ton prog, lance regedit après avoir relancé explorer en admin et regarde avec ce regedit là quel user tu as. Si la logique est respectée, tu devrais lire "toto".
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Gnifrus
Niveau 4
Niveau 4
Messages : 81
Enregistré le : mar. 14 juil. 2009 13:48
Localisation : Montauban
Status : Hors ligne

Re: [..] RegRead et actualisation de la Base de Registre...

#5

Message par Gnifrus »

Bonjour jchd,

Désolé de ne pas avoir répondu plus tôt, mais pas mal occupé en ce moment...
J'ai donc essayé, comme tu me l'a conseillé, de lancer le regedit à partir du programme autoit après avoir relancé explorer.exe, et effectivement, la clé en question contient bien "toto".

C'est d'ailleurs logique, comme tu le dis...
Le programme autoit est lancé en tant que user, donc il le reste, même après basculement de l'explorer en admin...

Merci beaucoup pour ton aide bien précieuse.

Je clos le sujet.
Bonne continuation,

Gnifrus
Répondre