GESTION BASE DE REGISTRE (LOCAL OU DISTANTE)AVEC DES FONCTIONS API(NEW)

Signaler
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
excrt
Messages postés
75
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
3 juillet 2006
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/37903-gestion-base-de-registre-local-ou-distante-avec-des-fonctions-api-new

excrt
Messages postés
75
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
3 juillet 2006

#include <windows.h> // ...
#include // std::cout
#include <string> // std::string
#include <sstream> // std::stringstream

// PCSTR >> const char*
std::string GetValueData(HKEY hkTopKey, PCSTR pSubKey, PCSTR pValueName)
{
HKEY hkKey;
DWORD dwType;
DWORD dwDataSize = cstMaxRegLength;
BYTE* pData;
std::string strBuffer;
std::stringstream strStream;

if (RegOpenKeyExA(hkTopKey, pSubKey, 0, KEY_READ, &hkKey) == ERROR_SUCCESS)
{
pData = new BYTE[cstMaxRegLength + 1];

if (RegQueryValueExA(hkKey, pValueName, NULL, &dwType, pData, &dwDataSize) == ERROR_SUCCESS)
{
switch (dwType)
{
case REG_BINARY:
strStream << (UINT)pData[0] << (CHAR)'.' <<\
(UINT)pData[1] << (CHAR)'.' <<\
(UINT)pData[2] << (CHAR)'.' <<\
(UINT)pData[3];
break;

case REG_DWORD:
strStream << *(DWORD*)pData;
break;

default: dwDataSize = 0;
// !break

case REG_EXPAND_SZ:
case REG_MULTI_SZ:
case REG_SZ:
pData[dwDataSize] = '\0'; // simple précaution
strStream << (PCSTR)pData;
break;
}
strBuffer = strStream.str();
}
delete [] pData; // libère la mémoire
RegCloseKey(hkKey);
}
return strBuffer;
}

int main()
{
std::string retval = GetValueData(..., ..., ...);

std::cout << retval << std::endl;
return 0;
}
excrt
Messages postés
75
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
3 juillet 2006

dernière petite chose pour aujourd'hui
dans « GetValueData() » tu as oublié de libérer la mémoire alloué pour lpData

« delete [] lpData; » avant de quitter la fonction(GetValueData)
excrt
Messages postés
75
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
3 juillet 2006

en passant:
« cout << GetValueData(hkKey,"SOFTWARE\\Microsoft\\DirectX","Version") << endl; »

ton GetValueData() retourne un pointeur sur un char* que tu as alloué
récupère la valeur de GetValueData() et _ensuite_, affiche la

char* ptr = GetValueData( ... );
cout << ptr << endl;
delete [] ptr;

sinon tu vas avoir des fuites de mémoire _partout_ !

dans ton GetValueData(), petit truc:

// ...
char * rValue = new char[cstMaxRegLength];
rValue[0] = '\0'; // place ca ici(valeur par défaut, si on veut), comme ca tu sauve beaucoup de « else/default/... »
// ..

la répétition de code c'est pas très bon ...
excrt
Messages postés
75
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
3 juillet 2006

« Rem:Compilation avec Borland C++ 5.5 (pas d'erreur de compil). »

une compilation sans erreur ne veut strictement _rien_ dire ...
tu peux très bien avoir « 0 error(s), 0 warning(s) » lors de la compilation
et obtenir un soft _complètement_ disfonctionnel!
UKR6900
Messages postés
4
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
24 juin 2006

Dans un code source ,il manque toujour quelque chose
c'est ça enrichir un code au fur et mesure des besoins.
Mais celui-ci est une base importante pour une programmation
système des base de registre.(Contrôle des paramétrages Anti-virus, création des
clé pour contrôle des logs etc...)
Ce sont les fonctions qui sont importantes,pas le code qui donne un exemple d'utilisation des fonctions.
Et celui qui comprend pas l'intérêt de ce code, c'est qu'il ne travaille pas dans le bon domaine de programmation et voilà....
Moi dans le temps, j'aurai été content de trouver des exemples comme celui-ci.
A bon entendeur, A+
vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Tu es sur qu'il ne manque rien? Parce que la j'ai pas compris l'intérêt de ton code
vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Je pensais pas qu'on pouvait déposer des ébauches par inadvertance