Page 1 sur 1

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

Posté : ven. 12 avr. 2013 10:34
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.

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

Posté : ven. 12 avr. 2013 12:47
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.

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

Posté : ven. 12 avr. 2013 13:35
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.

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

Posté : ven. 12 avr. 2013 14:30
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".

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

Posté : lun. 15 avr. 2013 17:20
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