Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comportement base des registres

2 réponses
Avatar
Jérôme VERITE
Bonjour à tous,

J'essaye de lire une valeur dans la base des registres, cette valeur est
conservée dans la section LOCAL_MACHINE de manière à être partagée entre les
différents comptes utilisateurs de la machine.

A partir du compte administrateur je parviens à lire cette valeur sans aucun
souci, par contre à partir d'un compte utilisateur sans droit, j'obtiens une
jolie chaine vide en retour. Ce que je ne comprend pas, c'est que si le
blocage était par rapport aux droits de chacun, comment j'arriverai à voir
ma valeur avec regedit à partir du compte utilisateur, ce que je parviens à
faire.

Pour complément, ci-dessous le code qui me permet de lire la valeur

Merci d'avance pour votre aide

Jérôme

strRetour = GetSetting("Software\Entreprise\Logiciel\", "Champ",
HKEY_LOCAL_MACHINE)

Public Function GetSetting(ByVal Section As String, ByVal Key As String,
HKeyRoot As Long, Optional ByVal Default As String = "") As String
' Section Required. String expression containing the name of the
section where the key setting is found.
' If omitted, key setting is assumed to be in default subkey.
' Key Required. String expression containing the name of the key
setting to return.
' Default Optional. Expression containing the value to return if no
value is set in the key setting.
' If omitted, default is assumed to be a zero-length string
("").
Dim nRet As Long
Dim hKey As Long
Dim nType As Long
Dim nBytes As Long
Dim buffer As String

' Assume failure and set return to Default
GetSetting = Default

' Open key
nRet = RegOpenKeyEx(HKeyRoot, Section, 0&, KEY_ALL_ACCESS, hKey)
If nRet = ERROR_SUCCESS Then
' Set appropriate value for default query
If Key = "*" Then Key = vbNullString

' Determine how large the buffer needs to be
nRet = RegQueryValueEx(hKey, Key, 0&, nType, ByVal buffer, nBytes)
If nRet = ERROR_SUCCESS Then
' Build buffer and get data
If nBytes > 0 Then
buffer = Space(nBytes)
nRet = RegQueryValueEx(hKey, Key, 0&, nType, ByVal buffer,
Len(buffer))
If nRet = ERROR_SUCCESS Then
' Trim NULL and return successful query!
GetSetting = Left$(buffer, nBytes - 1)
End If
End If
End If
End If
End Function

2 réponses

Avatar
François Picalausa
Bonjour/soir,

AMHA, l'erreur se trouve dans
nRet = RegOpenKeyEx(HKeyRoot, Section, 0&, *KEY_ALL_ACCESS*, hKey)

Tu demande tous les droits sur la clé...
Windows sait que l'utilisateur ne peut pas les avoir et donc ne te permet
pas d'avoir tous les droits et donc, n'accepte pas la demande...

Un KEY_QUERY_VALUE (de mémoire) serait plus approprié.. et tu trouveras
d'autres infos dans la msdn:
http://msdn.microsoft.com/library/en-us/sysinfo/base/regqueryvalueex.asp

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


Jérôme VERITE wrote:
Bonjour à tous,

J'essaye de lire une valeur dans la base des registres, cette valeur
est conservée dans la section LOCAL_MACHINE de manière à être
partagée entre les différents comptes utilisateurs de la machine.

A partir du compte administrateur je parviens à lire cette valeur
sans aucun souci, par contre à partir d'un compte utilisateur sans
droit, j'obtiens une jolie chaine vide en retour. Ce que je ne
comprend pas, c'est que si le blocage était par rapport aux droits de
chacun, comment j'arriverai à voir ma valeur avec regedit à partir du
compte utilisateur, ce que je parviens à faire.

Pour complément, ci-dessous le code qui me permet de lire la valeur

Merci d'avance pour votre aide

Jérôme

strRetour = GetSetting("SoftwareEntrepriseLogiciel", "Champ",
HKEY_LOCAL_MACHINE)

Public Function GetSetting(ByVal Section As String, ByVal Key As
String, HKeyRoot As Long, Optional ByVal Default As String = "") As
String ' Section Required. String expression containing the name
of the
section where the key setting is found.
' If omitted, key setting is assumed to be in default
subkey. ' Key Required. String expression containing the
name of the key setting to return.
' Default Optional. Expression containing the value to return if
no value is set in the key setting.
' If omitted, default is assumed to be a zero-length
string ("").
Dim nRet As Long
Dim hKey As Long
Dim nType As Long
Dim nBytes As Long
Dim buffer As String

' Assume failure and set return to Default
GetSetting = Default

' Open key
nRet = RegOpenKeyEx(HKeyRoot, Section, 0&, KEY_ALL_ACCESS, hKey)
If nRet = ERROR_SUCCESS Then
' Set appropriate value for default query
If Key = "*" Then Key = vbNullString

' Determine how large the buffer needs to be
nRet = RegQueryValueEx(hKey, Key, 0&, nType, ByVal buffer,
nBytes) If nRet = ERROR_SUCCESS Then
' Build buffer and get data
If nBytes > 0 Then
buffer = Space(nBytes)
nRet = RegQueryValueEx(hKey, Key, 0&, nType, ByVal buffer,
Len(buffer))
If nRet = ERROR_SUCCESS Then
' Trim NULL and return successful query!
GetSetting = Left$(buffer, nBytes - 1)
End If
End If
End If
End If
End Function


Avatar
Jérôme VERITE
Merci beaucoup, ca marche à merveille

Jérôme

"François Picalausa" a écrit dans le message de news:
#
Bonjour/soir,

AMHA, l'erreur se trouve dans
nRet = RegOpenKeyEx(HKeyRoot, Section, 0&, *KEY_ALL_ACCESS*, hKey)

Tu demande tous les droits sur la clé...
Windows sait que l'utilisateur ne peut pas les avoir et donc ne te permet
pas d'avoir tous les droits et donc, n'accepte pas la demande...

Un KEY_QUERY_VALUE (de mémoire) serait plus approprié.. et tu trouveras
d'autres infos dans la msdn:
http://msdn.microsoft.com/library/en-us/sysinfo/base/regqueryvalueex.asp

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


Jérôme VERITE wrote:
> Bonjour à tous,
>
> J'essaye de lire une valeur dans la base des registres, cette valeur
> est conservée dans la section LOCAL_MACHINE de manière à être
> partagée entre les différents comptes utilisateurs de la machine.
>
> A partir du compte administrateur je parviens à lire cette valeur
> sans aucun souci, par contre à partir d'un compte utilisateur sans
> droit, j'obtiens une jolie chaine vide en retour. Ce que je ne
> comprend pas, c'est que si le blocage était par rapport aux droits de
> chacun, comment j'arriverai à voir ma valeur avec regedit à partir du
> compte utilisateur, ce que je parviens à faire.
>
> Pour complément, ci-dessous le code qui me permet de lire la valeur
>
> Merci d'avance pour votre aide
>
> Jérôme
>
> strRetour = GetSetting("SoftwareEntrepriseLogiciel", "Champ",
> HKEY_LOCAL_MACHINE)
>
> Public Function GetSetting(ByVal Section As String, ByVal Key As
> String, HKeyRoot As Long, Optional ByVal Default As String = "") As
> String ' Section Required. String expression containing the name
> of the
> section where the key setting is found.
> ' If omitted, key setting is assumed to be in default
> subkey. ' Key Required. String expression containing the
> name of the key setting to return.
> ' Default Optional. Expression containing the value to return if
> no value is set in the key setting.
> ' If omitted, default is assumed to be a zero-length
> string ("").
> Dim nRet As Long
> Dim hKey As Long
> Dim nType As Long
> Dim nBytes As Long
> Dim buffer As String
>
> ' Assume failure and set return to Default
> GetSetting = Default
>
> ' Open key
> nRet = RegOpenKeyEx(HKeyRoot, Section, 0&, KEY_ALL_ACCESS, hKey)
> If nRet = ERROR_SUCCESS Then
> ' Set appropriate value for default query
> If Key = "*" Then Key = vbNullString
>
> ' Determine how large the buffer needs to be
> nRet = RegQueryValueEx(hKey, Key, 0&, nType, ByVal buffer,
> nBytes) If nRet = ERROR_SUCCESS Then
> ' Build buffer and get data
> If nBytes > 0 Then
> buffer = Space(nBytes)
> nRet = RegQueryValueEx(hKey, Key, 0&, nType, ByVal buffer,
> Len(buffer))
> If nRet = ERROR_SUCCESS Then
> ' Trim NULL and return successful query!
> GetSetting = Left$(buffer, nBytes - 1)
> End If
> End If
> End If
> End If
> End Function