Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Как прочитать все записи в ключе реестра?RegEnumValue (https://forum.antichat.xyz/showthread.php?t=87500)

_nic 04.10.2008 21:38

Как прочитать все записи в ключе реестра?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); то значения получается абсолютно иные чем те что видны в регедите.

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

Цитата:

Сообщение от FrMn
RegEnumValue...
вот гугл покозал http://www.tenouk.com/ModuleP.html

поидее в твоем случае надо *(DWORD*)Value

Я правильно понял что это преобразование надо для вывода значения записей типа REG_DWORD ?

FrMn 05.10.2008 15:42

да

_nic 05.10.2008 19:44

Цитата:

Сообщение от FrMn
да

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

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]);



Время: 13:04