Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Как прочитать все записи в ключе реестра?RegEnumValue |

04.10.2008, 21:38
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Как прочитать все записи в ключе реестра?RegEnumValue
Собрать имена записей не проблема
Код:
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); то значения получается абсолютно иные чем те что видны в регедите.
|
|
|

04.10.2008, 21:50
|
|
Познающий
Регистрация: 08.08.2008
Сообщений: 55
Провел на форуме: 369629
Репутация:
54
|
|
RegEnumValue...
вот гугл покозал http://www.tenouk.com/ModuleP.html
Вот к если пытатся вывести значение ключа с 16ричным числом wsprintf(buff,"%х",Value);
поидее в твоем случае надо *(DWORD*)Value
Последний раз редактировалось FrMn; 04.10.2008 в 21:57..
|
|
|

05.10.2008, 14:14
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Сообщение от FrMn
RegEnumValue...
вот гугл покозал http://www.tenouk.com/ModuleP.html
поидее в твоем случае надо *(DWORD*)Value
Я правильно понял что это преобразование надо для вывода значения записей типа REG_DWORD ?
|
|
|

05.10.2008, 15:42
|
|
Познающий
Регистрация: 08.08.2008
Сообщений: 55
Провел на форуме: 369629
Репутация:
54
|
|
да
|
|
|

05.10.2008, 19:44
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Что то у меня неочень получается определять тип записи 
Набрасал такую вот структуру
Код:
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) но получается полная фигня 
|
|
|

05.10.2008, 19:54
|
|
Познающий
Регистрация: 08.08.2008
Сообщений: 55
Провел на форуме: 369629
Репутация:
54
|
|
фигня получается, потомучто фигня написанна, посмори константы REG_XXX...
сделай массив указателей на строки в том порядке, в котором идут константы, тогда получится. чтото похожее на след код:
Код:
char *type_arr[]={"none","sz","szexpand","binary","dword","dword big"....};
sprintf(buf,"%s",type_arr[tip]);
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|