OVH Cloud OVH Cloud

charger une ruche de Registre

29 réponses
Avatar
scraper
bonjour à tous !

je recherche des infos sur la façon de procéder programmatiquement pour
charger une ruche dans le Registre, depuis un fichier ntuser.dat

(on suppose que ce fichier n'est pas en cours d'utilisation ...)

mais j'ai aucune idée d'un début de commencement d'embryon de piste :-(

merci de toute l'aide que vous pourrez m'apporter



--

Adresse invalide
Merci de répondre sur le forum ...
http://scraper.chez.tiscali.fr

scraper

10 réponses

1 2 3
Avatar
Fred
Dans le message:,
scraper écrit :
Bonjour Fred, dans le message
news:
tu disais :


Ben, je n'osais même pas te donner le lien tellement je l'ai trouvé
rapidement en tapant RegLoadKey dans la zone de recherche de la MSDN
:-D http://support.microsoft.com/default.aspx?scid=kb;en-us;297060
D'après l'introduction, cela charge bien un fichier ruche NTUSER.DAT
Pas testé, pas de VB6 à la maison.
Bonne lecture



ben petits problèmes quand même :
avant de m'aventurer à modifier le code, je l'ai testé tel que, sur un
fichier ntuser non chargé au démarrage de mon systeme...

pas moyen de charger la ruche ! :-(

j'ai bien la clé "keyLoaded" qui est créée, mais elle est vide ...

en outre, quand je veux fermer le projet, et donc décharger la ruche,
j'ai un message d'erreur ...
(RegUnloadKey:87)

et impossible de supprimer manuellement la clé dans le Registre ...

voila, c'est pas brillant :-(



Une idée, mais je ne suis pas un spécialiste es API en VB !
Si tu mets alias : RegLoadKeyW à la place de RegLoadKeyA, qu'est-ce que cela
donne ?
(de même pour les autres fonctions)

--
Fred
Avatar
Jacques93
Bonjour Fred et Scraper,
Fred a écrit :
"scraper" a écrit dans le message de
news:

Bonjour Fred, dans le message
news:
tu disais :



Ben, je n'osais même pas te donner le lien tellement je l'ai trouvé
rapidement en tapant RegLoadKey dans la zone de recherche de la MSDN
:-D http://support.microsoft.com/default.aspx?scid=kb;en-us;297060
D'après l'introduction, cela charge bien un fichier ruche NTUSER.DAT
Pas testé, pas de VB6 à la maison.
Bonne lecture



ben petits problèmes quand même :
avant de m'aventurer à modifier le code, je l'ai testé tel que, sur un
fichier ntuser non chargé au démarrage de mon systeme...

pas moyen de charger la ruche ! :-(

j'ai bien la clé "keyLoaded" qui est créée, mais elle est vide ...

en outre, quand je veux fermer le projet, et donc décharger la ruche, j'ai
un message d'erreur ...
(RegUnloadKey:87)

et impossible de supprimer manuellement la clé dans le Registre ...

voila, c'est pas brillant :-(




Bonjour,
Je viens de tester le code du lien sans problème.
Petite précision et qui doit avoir son importance : je suis sous Windows
2000 !
Effectivement, en relisant la page attentivement, il est précisé que la
procédure est donné pour NT4 ou 2000.
Désolé de na pas l'avoir fait avant !
Effectivement, il y a des différences dans la clé HK_USERS sous XP (je crois
qu'on l'avait évoqué dans un autre fil avec Luc Burnouf). Cela vient
probablement de là.
En ce qui concerne ton registre, as-tu essayé de régler les autorisations
pour supprimer la nouvelle clé ?
Je vais regarder si je trouve autre chose pour XP. Il n'y a pas de raisons.





Après essai du code sous XP SP2, pour moi c'est OK, avec les privilèges
Administrateur, sinon Erreur 1314.

On obtient l'erreur 87 ,entre autre, si le contrôle Text1 ne contient
pas un chemin valide vers un fichier NtUser.Dat (Erreur 3 sur
RegLoadKey, et 87 sur RegUnloadKey), mais dans ce cas de figure, la
ruche keyLoaded n'apparait pas sous HKEYS_USERS. Donc à suivre ...


Extrait des Codes Erreur définis dans Winerror.h :
// The system cannot find the path specified.
//
#define ERROR_PATH_NOT_FOUND 3L

// The parameter is incorrect.
//
#define ERROR_INVALID_PARAMETER 87L

// A required privilege is not held by the client.
//
#define ERROR_PRIVILEGE_NOT_HELD 1314L
--
Cordialement,

Jacques.
Avatar
Michel
Merçi de tous ces bons tuyaux que je vais mettre de coté au cas où?
Avatar
Zoury
Salut Fred ! :O)

Les fonctions API qui ont des chaines de caractères en paramètre ont souvent
une version A (ANSI) et W (Unicode). La différence entre les deux, c'est que
la version A s'attend à recevoir ses paramètres de types String en ASCII et
l'autre (W) en Unicode..

Pour ceux qui ne le savait pas, VB conserve les chaines en Unicode à
l'interne et conserve également une copie de la chaine en version ANSI.
C'est la version ANSI qui est employé pour les appels standard. La function
StrPtr() permet d'obtenir l'adresse de la version Unicode de la chaine, on
l'utilise lorsque l'on doit passer une chaine Unicode à un API.

Voici un exemple d'appel des 2 versions pour les curieux :
http://groups.google.com/groups?hl=fr&lr=&selm=%23BasxC64EHA.3416%40TK2MSFTNGP09.phx.gbl&rnum=4


Donc, en gros, le fait de changer une pour l'autre ne devrait en aucun cas
changer le résultat. :O)

--
Cordialement
Yanick
MVP pour Visual Basic
"Fred" a écrit dans le message de
news:
Dans le message:,
scraper écrit :
> Bonjour Fred, dans le message
> news:
> tu disais :
>
>
>> Ben, je n'osais même pas te donner le lien tellement je l'ai trouvé
>> rapidement en tapant RegLoadKey dans la zone de recherche de la MSDN
>> :-D http://support.microsoft.com/default.aspx?scid=kb;en-us;297060
>> D'après l'introduction, cela charge bien un fichier ruche NTUSER.DAT
>> Pas testé, pas de VB6 à la maison.
>> Bonne lecture
>
> ben petits problèmes quand même :
> avant de m'aventurer à modifier le code, je l'ai testé tel que, sur un
> fichier ntuser non chargé au démarrage de mon systeme...
>
> pas moyen de charger la ruche ! :-(
>
> j'ai bien la clé "keyLoaded" qui est créée, mais elle est vide ...
>
> en outre, quand je veux fermer le projet, et donc décharger la ruche,
> j'ai un message d'erreur ...
> (RegUnloadKey:87)
>
> et impossible de supprimer manuellement la clé dans le Registre ...
>
> voila, c'est pas brillant :-(

Une idée, mais je ne suis pas un spécialiste es API en VB !
Si tu mets alias : RegLoadKeyW à la place de RegLoadKeyA, qu'est-ce que


cela
donne ?
(de même pour les autres fonctions)

--
Fred




Avatar
Fred
Dans le message:,
Zoury écrit :
Salut Fred ! :O)

Les fonctions API qui ont des chaines de caractères en paramètre ont
souvent une version A (ANSI) et W (Unicode). La différence entre les
deux, c'est que la version A s'attend à recevoir ses paramètres de
types String en ASCII et l'autre (W) en Unicode..



Bonjour,
Merci d'éclairer ma lanterne à ce sujet !
Je me posais la question pour le problème de Scraper car un des paramètres
est un chemin d'accès à un fichier.
Si j'émettais cette hypothèse, sans connaître ce que tu expliques, c'est
pour la raison suivante :
Il est tout à fait possible, avec l'explorateur windows, de créer des
répertoires ou des fichiers dont le nom contient des caractères non ANSI. Tu
peux faire un essai en allant copier un caractère dans les fin-fonds de la
table de caractères et en le collant dans le nom d'un nouveau dossier.
(ce qui, au passage, génère des problèmes avec l'exportation des favoris IE,
mais c'est une autre discussion en cours sur le newsgroup IE6 !)
C'est faisable sous XP nativement, pas sous 2000 je crois (un test négatif
sur une installation de base).
Dans ce cas, n'est-il pas préférable d'utiliser systématiquement les
versions Unicode des APIs dès lors que l'on est suceptible de tomber sur un
tel cas ? J'imagine qu'à l'avenir, MS optera pour le tout Unicode pour
simplifier l'internationalisation de ses systèmes.
Bon, j'admets que mon utilisation d'XP n'est pas des plus communes à ce
sujet, mais j'imagine que je ne suis pas le seul utilisateur dans ce cas.
Enfin, le problème de Scraper n'est sans doute pas là puisque Jacques
signale qu'il a fait tourner le code sur un XP sans soucis.



--
Fred
Avatar
Zoury
> Dans ce cas, n'est-il pas préférable d'utiliser systématiquement les
versions Unicode des APIs dès lors que l'on est suceptible de tomber sur


un
tel cas ?



Aaahh ! Dans ce cas il est possible que ça change quelque chose en effet.

J'imagine qu'à l'avenir, MS optera pour le tout Unicode pour
simplifier l'internationalisation de ses systèmes.



Yep. Toutes les chaines .NET sont en Unicode.

--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
Jacques93
Bonjour Zoury,
Zoury a écrit :
Salut Fred ! :O)

Les fonctions API qui ont des chaines de caractères en paramètre ont souvent
une version A (ANSI) et W (Unicode). La différence entre les deux, c'est que
la version A s'attend à recevoir ses paramètres de types String en ASCII et
l'autre (W) en Unicode..

Pour ceux qui ne le savait pas, VB conserve les chaines en Unicode à
l'interne et conserve également une copie de la chaine en version ANSI.
C'est la version ANSI qui est employé pour les appels standard. La function
StrPtr() permet d'obtenir l'adresse de la version Unicode de la chaine, on
l'utilise lorsque l'on doit passer une chaine Unicode à un API.

Voici un exemple d'appel des 2 versions pour les curieux :
http://groups.google.com/groups?hl=fr&lr=&selm=%23BasxC64EHA.3416%40TK2MSFTNGP09.phx.gbl&rnum=4


Donc, en gros, le fait de changer une pour l'autre ne devrait en aucun cas
changer le résultat. :O)




On peut également utiliser la fonction StrConv, notamment pour certaines
API réseaux qui existent uniquement en Unicode sous W2K, XP
(NetApi32.dll) par ex :

Private Declare Function NetConnectionEnum Lib "NetApi32.dll" Alias
"NetConnectionEnum" (ByVal ServerName As String, ByVal Qualifier As
String, ByVal Level As Long, bufptr As Long, PrefMaxLen As Long,
EntriesRead As Long, TotalEntries As Long, Resume_Handle As Long) As Long


NetConnectionEnum (StrConv(Server, vbUnicode), _
StrConv(Qualifier, vbUnicode), _ ...

et l'inverse au retour :

StrA = StrConv (StrU, vbFromUnicode)

--
Cordialement,

Jacques.
Avatar
Zoury
> On peut également utiliser la fonction StrConv, notamment pour certaines
API réseaux qui existent uniquement en Unicode sous W2K, XP
(NetApi32.dll) par ex :



Yep.. Mais StrPtr() nous donne directement le pointeur de la chaine Unicode
qui se trouve en mémoire tandis que la fonction StrConv() recréer une chaine
unicode en mémoire à partir de la copie ANSI.. c'est donc plus de traitement
.. mais bon.. on parle nanoseconde ;O)

voici un benchmark pour la bonne cause :
'***
Option Explicit

Public Sub Main()

Const NUM_LOOP As Long = 1000000
Const CHAINE_TEST As String = "Voici un chaine test"
Dim nLoop As Long
Dim n1 As Long
Dim n2 As Long
Dim sw As CStopWatch
Dim i As Long
Dim lp As Long
Dim s As String

Set sw = New CStopWatch

Call sw.Reset
For i = 1 To NUM_LOOP
Next
nLoop = sw.Elapsed

Call sw.Reset
For i = 1 To NUM_LOOP
lp = StrPtr(CHAINE_TEST)
Next
n1 = sw.Elapsed

Call sw.Reset
For i = 1 To NUM_LOOP
s = StrConv(CHAINE_TEST, vbUnicode)
Next
n2 = sw.Elapsed

Debug.Print "Nombre de tours : " & NUM_LOOP
Debug.Print "Temps de la boucle : " & nLoop & " ms"
Debug.Print "n1 : " & n1 - nLoop & " ms"
Debug.Print "n2 : " & n2 - nLoop & " ms"

End Sub
'***

résultat :
Nombre de tours : 1000000
Temps de la boucle : 7 ms
n1 : 25 ms
n2 : 1076 ms


--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
scraper
Bonjour Fred, dans le message
news:u%
tu disais :


Bonjour,
Je viens de tester le code du lien sans problème.
Petite précision et qui doit avoir son importance : je suis sous
Windows 2000 !
Effectivement, en relisant la page attentivement, il est précisé que
la procédure est donné pour NT4 ou 2000.
Désolé de na pas l'avoir fait avant !



c'est pas grave ;-)

Effectivement, il y a des différences dans la clé HK_USERS sous XP
(je crois qu'on l'avait évoqué dans un autre fil avec Luc Burnouf).
Cela vient probablement de là.



bon .... j'ai refait un essai sous HKEY_LOCAL_MACHINE ....

guère plus brillant !
là, j'arrive à supprimer la clé créée, mais elle ne se charge toujours pas
?? :-(

En ce qui concerne ton registre, as-tu essayé de régler les
autorisations pour supprimer la nouvelle clé ?



bon là sur ce coup là, il semble que ce soit pas ça le problème ... ??

je vais continuer à chercher, notamment du côté de la réponse de jacques93

merci de ton aide


--

Adresse invalide
Merci de répondre sur le forum ...
http://scraper.chez.tiscali.fr

scraper
Avatar
scraper
Bonjour Jacques93, dans le message
news:
tu disais :

Après essai du code sous XP SP2, pour moi c'est OK, avec les
privilèges Administrateur, sinon Erreur 1314.



ahah ?
tu me mets l'eau à la bouche ! :-)

si c'est pas indiscret, comment as tu procédé ?
avais tu un fichier (copie ?) ntuser.dat non chargé ou utilises tu celui
chargé dans ta session ?

On obtient l'erreur 87 ,entre autre, si le contrôle Text1 ne contient
pas un chemin valide vers un fichier NtUser.Dat (Erreur 3 sur
RegLoadKey, et 87 sur RegUnloadKey), mais dans ce cas de figure, la
ruche keyLoaded n'apparait pas sous HKEYS_USERS. Donc à suivre ...



ben ce que je comprends pas, c'est que je ne retourne aucun code d'erreur,
et la clé "keyLoaded" est bien créée ... mais vide ! :-(
y'a un truc que je capte pas là ...
sans doute une mauvaise manip' de ma part


--

Adresse invalide
Merci de répondre sur le forum ...
http://scraper.chez.tiscali.fr

scraper
1 2 3