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

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 2 juin 2006 à 11:16
excrt Messages postés 75 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 3 juillet 2006 - 4 juin 2006 à 16:50
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
4 juin 2006 à 16:50
#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
2 juin 2006 à 17:06
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
2 juin 2006 à 17:03
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
2 juin 2006 à 16:57
« 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
2 juin 2006 à 12:13
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 Membre Dernière intervention 22 août 2010 14
2 juin 2006 à 11:22
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 Membre Dernière intervention 22 août 2010 14
2 juin 2006 à 11:16
Je pensais pas qu'on pouvait déposer des ébauches par inadvertance
Rejoignez-nous