PDA

Просмотр полной версии : Как прочитать все записи в ключе реестра?RegEnumValue


_nic
04.10.2008, 21:38
Собрать имена записей не проблема

char *buf=new char[1024*1024];
char *buff=new char[1024*10];
long retd;
HKEY key;DWORD datind=0;
char Name[MAX_PATH], Value[MAX_PATH];;
DWORD NameSize,tip,ValueSize;
if(RegOpenKeyEx(HKEY_CURRENT_USER,"Console",0,KEY_ALL_ACCESS,&key)==ERROR_SUCCESS)
{
for(;;)
{
NameSize=MAX_PATH;
retd=RegEnumValue(key,datind++,&Name[0],&NameSize,NULL,&tip,(unsigned char*)&Value[0],&ValueSize);
wsprintf(buff,"%s\n",Name);
strcat(buf,buff);
if(retd==ERROR_NO_MORE_ITEMS){break;}
}}

А вот со всем с остальным проблема :(
Вот к если пытатся вывести значение ключа с 16ричным числом wsprintf(buff,"%х",Value); то значения получается абсолютно иные чем те что видны в регедите.

FrMn
04.10.2008, 21:50
RegEnumValue...
вот гугл покозал http://www.tenouk.com/ModuleP.html
Вот к если пытатся вывести значение ключа с 16ричным числом wsprintf(buff,"%х",Value);
поидее в твоем случае надо *(DWORD*)Value

_nic
05.10.2008, 14:14
RegEnumValue...
вот гугл покозал http://www.tenouk.com/ModuleP.html

поидее в твоем случае надо *(DWORD*)Value
Я правильно понял что это преобразование надо для вывода значения записей типа REG_DWORD ?

FrMn
05.10.2008, 15:42
да

_nic
05.10.2008, 19:44
да
Что то у меня неочень получается определять тип записи :(
Набрасал такую вот структуру

struct {UINT type;LPCSTR name;}
RGTP [] = {
{ REG_BINARY, "REG_BINARY" },
{ REG_DWORD, "REG_DWORD" },
{ REG_DWORD_LITTLE_ENDIAN, "REG_DWORD_LITTLE_ENDIAN" },
{ REG_DWORD_BIG_ENDIAN, "REG_DWORD_BIG_ENDIAN" },
{ REG_EXPAND_SZ,"REG_EXPAND_SZ" },
{ REG_LINK, "reserved for system" },
{ REG_MULTI_SZ, "REG_MULTI_SZ" },
{ REG_NONE, "No defined value type." },
{ REG_QWORD, "REG_QWORD" },
{ REG_QWORD_LITTLE_ENDIAN,"REG_QWORD_LITTLE_ENDIAN"},
{ REG_SZ, "REG_SZ" },
{ 0, NULL},
};

Юзаю так sprintf(buff,"%s",RGTP[tip].name) но получается полная фигня :(

FrMn
05.10.2008, 19:54
фигня получается, потомучто фигня написанна, посмори константы REG_XXX...
сделай массив указателей на строки в том порядке, в котором идут константы, тогда получится. чтото похожее на след код:
char *type_arr[]={"none","sz","szexpand","binary","dword","dword big"....};
sprintf(buf,"%s",type_arr[tip]);