_nic
30.03.2009, 19:24
Вот пара сишных ф-ций
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);
}
Ппроблема в том что обкусываются последние буквы имен некоторых разделов и записей.Причем обкусывается как то рандомно.Помогите пжлст найти косяк.
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);
}
Ппроблема в том что обкусываются последние буквы имен некоторых разделов и записей.Причем обкусывается как то рандомно.Помогите пжлст найти косяк.