ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Проблема с отображением записей реестра
  #1  
Старый 30.03.2009, 19:24
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию Проблема с отображением записей реестра

Вот пара сишных ф-ций
Код:
char* regtp(DWORD tp)
{
if(tp==REG_BINARY){return("REG_BINARY");}
if(tp==REG_DWORD){return("REG_DWORD");}
if(tp==REG_DWORD_LITTLE_ENDIAN){return("REG_DWORD_LITTLE_ENDIAN");}
if(tp==REG_DWORD_BIG_ENDIAN){return("REG_DWORD_BIG_ENDIAN");}
if(tp==REG_EXPAND_SZ){return("REG_EXPAND_SZ");}
if(tp==REG_LINK){return("REG_LINK(reserved for system)");}
if(tp==REG_MULTI_SZ){return("REG_MULTI_SZ");}
if(tp==REG_NONE){return("REG_NONE");}
if(tp==REG_QWORD){return("REG_QWORD");}
if(tp==REG_QWORD_LITTLE_ENDIAN){return("REG_QWORD_LITTLE_ENDIAN");}
if(tp==REG_SZ){return("REG_SZ");}
}
char* lsreg(HKEY ink,char subk[1024])
{
char *buf=new char[1024*1024];
char *kname=new char[1204*10];
char *buff=new char[1024*10];
memset(buf,NULL,1024*1024);
long retk,retd;DWORD len,maxlen;
HKEY key;DWORD keyind=0,datind=0;
char Name[MAX_PATH], Value[MAX_PATH];;
DWORD NameSize,tip,ValueSize;
if(RegOpenKeyEx(ink,subk,0,KEY_ALL_ACCESS,&key)==ERROR_SUCCESS)
{
RegQueryInfoKey(key,0,0,0,0,&maxlen,0,0,0,0,0,0);
//maxlen++;
for(;;)
{
len=maxlen;
memset(kname,NULL,1024*10);
retk=RegEnumKeyEx(key,keyind,kname,&len,0,0,0,0);
wsprintf(buff,"%s\n",kname);
strcat(buf,buff);
keyind++;
if(retk==ERROR_NO_MORE_ITEMS){break;}
}
}//buf+=4;
for(;;)
{
NameSize=MAX_PATH;
retd=RegEnumValue(key,datind++,&Name[0],&NameSize,NULL,&tip,(unsigned char*)&Value[0],&ValueSize);
wsprintf(buff,"%s %s\n",Name,/*(DWORD*)Value,*/regtp(tip));
strcat(buf,buff);
if(retd==ERROR_NO_MORE_ITEMS){break;}
tip=0;
}
return(buf);
}
Ппроблема в том что обкусываются последние буквы имен некоторых разделов и записей.Причем обкусывается как то рандомно.Помогите пжлст найти косяк.
 
Ответить с цитированием

  #2  
Старый 30.03.2009, 19:49
KaZ@NoVa
Постоянный
Регистрация: 05.07.2008
Сообщений: 555
Провел на форуме:
3134311

Репутация: 1467


Отправить сообщение для KaZ@NoVa с помощью ICQ Отправить сообщение для KaZ@NoVa с помощью AIM Отправить сообщение для KaZ@NoVa с помощью Yahoo
По умолчанию

Так просто и не скажешь, где косяк. Нужен отладчик, надо увидеть на каком шаге.
 
Ответить с цитированием

  #3  
Старый 30.03.2009, 19:55
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

Максимальный размер не правильно даешь.
Вместо len=maxlen; поставь len=1000;

ошибку тут
Код:
RegQueryInfoKey(key,0,0,0,0,&maxlen,0,0,0,0,0,0);
//maxlen++;
for(;;)
{
len=maxlen;
memset(kname,NULL,1024*10);
retk=RegEnumKeyEx(key,keyind,kname,&len,0,0,0,0);
судя по виду RegQueryInfoKey(key,0,0,0,0,&maxlen,0,0,0,0,0,0); обламывается или дает не верный результат. Или в этом редультате значение чуть несчитая завершающий символ 0x00
по этмоу len содержит не правильный размер.
т.к. ты игнориш это значение и выделяешь фиксировано память через memset(kname,NULL,1024*10);
то и присвой len=1024*10 вместо len=maxlen;

Последний раз редактировалось slesh; 30.03.2009 в 20:00..
 
Ответить с цитированием

  #4  
Старый 31.03.2009, 02:02
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию

Цитата:
Сообщение от slesh  
Максимальный размер не правильно даешь.
Вместо len=maxlen; поставь len=1000;

ошибку тут
Код:
RegQueryInfoKey(key,0,0,0,0,&maxlen,0,0,0,0,0,0);
//maxlen++;
for(;;)
{
len=maxlen;
memset(kname,NULL,1024*10);
retk=RegEnumKeyEx(key,keyind,kname,&len,0,0,0,0);
судя по виду RegQueryInfoKey(key,0,0,0,0,&maxlen,0,0,0,0,0,0); обламывается или дает не верный результат. Или в этом редультате значение чуть несчитая завершающий символ 0x00
по этмоу len содержит не правильный размер.
т.к. ты игнориш это значение и выделяешь фиксировано память через memset(kname,NULL,1024*10);
то и присвой len=1024*10 вместо len=maxlen;
Хм да причина в этом.Только вот теперь вылез ещё один баг.При вызове в последнем цикле wsprintf пtреодически и неожиданно выскакивает Eaccess Violation
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема подсчета трафика(под FreeBSD)... F&D *nix системы 4 18.01.2009 20:30
Подвергаются атаке... »Atom1c« Сотовый фрикинг 3 11.12.2006 08:48
проблема RocketV1_0 КИРЮХА ! Схемы и программы 0 10.06.2006 23:48
Hydra проблема с брутом Utochka Уязвимости 2 02.03.2006 23:37
Проблема Mac OS X не только в Safari DRON-ANARCHY Мировые новости 0 23.02.2006 21:12



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ