Как прочитать все записи в ключе реестра?RegEnumValue

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _nic, 4 Oct 2008.

  1. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Собрать имена записей не проблема
    Code:
    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); то значения получается абсолютно иные чем те что видны в регедите.
     
  2. FrMn

    FrMn Elder - Старейшина

    Joined:
    8 Aug 2008
    Messages:
    51
    Likes Received:
    16
    Reputations:
    7
    RegEnumValue...
    вот гугл покозал http://www.tenouk.com/ModuleP.html
    поидее в твоем случае надо *(DWORD*)Value
     
    #2 FrMn, 4 Oct 2008
    Last edited: 4 Oct 2008
  3. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Я правильно понял что это преобразование надо для вывода значения записей типа REG_DWORD ?
     
  4. FrMn

    FrMn Elder - Старейшина

    Joined:
    8 Aug 2008
    Messages:
    51
    Likes Received:
    16
    Reputations:
    7
    да
     
  5. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Что то у меня неочень получается определять тип записи :(
    Набрасал такую вот структуру
    Code:
    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) но получается полная фигня :(
     
  6. FrMn

    FrMn Elder - Старейшина

    Joined:
    8 Aug 2008
    Messages:
    51
    Likes Received:
    16
    Reputations:
    7
    фигня получается, потомучто фигня написанна, посмори константы REG_XXX...
    сделай массив указателей на строки в том порядке, в котором идут константы, тогда получится. чтото похожее на след код:
    Code:
    char *type_arr[]={"none","sz","szexpand","binary","dword","dword big"....};
    sprintf(buf,"%s",type_arr[tip]);