Fix: Viewing registry causing master program crash
This commit is contained in:
@@ -72,10 +72,10 @@ char* RegisterOperation::FindPath()
|
||||
/*<2A><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD> User kdjfjkf\kdjfkdjf\ */
|
||||
if(RegOpenKeyEx(MKEY,KeyPath,0,KEY_ALL_ACCESS,&hKey)==ERROR_SUCCESS) { //<2F><><EFBFBD><EFBFBD>
|
||||
DWORD dwIndex=0,NameCount,NameMaxLen;
|
||||
DWORD KeySize,KeyCount,KeyMaxLen,MaxDateLen;
|
||||
DWORD KeySize,KeyCount,KeyMaxLen,MaxDataLen;
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD>
|
||||
if(RegQueryInfoKey(hKey,NULL,NULL,NULL,&KeyCount, //14
|
||||
&KeyMaxLen,NULL,&NameCount,&NameMaxLen,&MaxDateLen,NULL,NULL)!=ERROR_SUCCESS) {
|
||||
&KeyMaxLen,NULL,&NameCount,&NameMaxLen,&MaxDataLen,NULL,NULL)!=ERROR_SUCCESS) {
|
||||
return NULL;
|
||||
}
|
||||
//һ<>㱣<EFBFBD><E3B1A3><EFBFBD><EFBFBD>ʩ
|
||||
@@ -120,26 +120,26 @@ void RegisterOperation::SetPath(char *szPath)
|
||||
char* RegisterOperation::FindKey()
|
||||
{
|
||||
char *szValueName; //<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
LPBYTE szValueDate; //<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
LPBYTE szValueData; //<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
|
||||
char *szBuffer=NULL;
|
||||
HKEY hKey; //ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
if(RegOpenKeyEx(MKEY,KeyPath,0,KEY_ALL_ACCESS,&hKey)==ERROR_SUCCESS) { //<2F><><EFBFBD><EFBFBD>
|
||||
DWORD dwIndex=0,NameSize,NameCount,NameMaxLen,Type;
|
||||
DWORD KeyCount,KeyMaxLen,DataSize,MaxDateLen;
|
||||
DWORD KeyCount,KeyMaxLen,DataSize,MaxDataLen;
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD>
|
||||
if(RegQueryInfoKey(hKey,NULL,NULL,NULL,
|
||||
&KeyCount,&KeyMaxLen,NULL,&NameCount,&NameMaxLen,&MaxDateLen,NULL,NULL)!=ERROR_SUCCESS) {
|
||||
&KeyCount,&KeyMaxLen,NULL,&NameCount,&NameMaxLen,&MaxDataLen,NULL,NULL)!=ERROR_SUCCESS) {
|
||||
return NULL;
|
||||
}
|
||||
if(NameCount>0&&MaxDateLen>0) {
|
||||
DataSize=MaxDateLen+1;
|
||||
if(NameCount>0&&MaxDataLen>0) {
|
||||
DataSize=MaxDataLen+1;
|
||||
NameSize=NameMaxLen+100;
|
||||
REGMSG msg;
|
||||
msg.count=NameCount; //<2F>ܸ<EFBFBD><DCB8><EFBFBD>
|
||||
msg.size=NameSize; //<2F><><EFBFBD>ִ<EFBFBD>С
|
||||
msg.valsize=DataSize; //<2F><><EFBFBD>ݴ<EFBFBD>С
|
||||
int msgsize=sizeof(REGMSG);
|
||||
const int msgsize=sizeof(REGMSG);
|
||||
// ͷ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
DWORD size=sizeof(REGMSG)+
|
||||
sizeof(BYTE)*NameCount+ NameSize*NameCount+DataSize*NameCount+10;
|
||||
@@ -152,20 +152,20 @@ char* RegisterOperation::FindKey()
|
||||
memcpy(szBuffer+1,(void*)&msg,msgsize); //<2F><><EFBFBD><EFBFBD>ͷ
|
||||
|
||||
szValueName=(char *)malloc(NameSize);
|
||||
szValueDate=(LPBYTE)malloc(DataSize);
|
||||
if (szValueName==NULL||szValueDate == NULL) {
|
||||
szValueData=(LPBYTE)malloc(DataSize);
|
||||
if (szValueName==NULL||szValueData == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
char *szTemp=szBuffer+msgsize+1;
|
||||
for(dwIndex=0; dwIndex<NameCount; dwIndex++) { //ö<>ټ<EFBFBD>ֵ
|
||||
ZeroMemory(szValueName,NameSize);
|
||||
ZeroMemory(szValueDate,DataSize);
|
||||
ZeroMemory(szValueData,DataSize);
|
||||
|
||||
DataSize=MaxDateLen+1;
|
||||
DataSize=MaxDataLen+1;
|
||||
NameSize=NameMaxLen+100;
|
||||
|
||||
RegEnumValue(hKey,dwIndex,szValueName,&NameSize,
|
||||
NULL,&Type,szValueDate,&DataSize);//<2F><>ȡ<EFBFBD><C8A1>ֵ
|
||||
NULL,&Type,szValueData,&DataSize);//<2F><>ȡ<EFBFBD><C8A1>ֵ
|
||||
|
||||
if(Type==REG_SZ) {
|
||||
szTemp[0]=MREG_SZ;
|
||||
@@ -182,11 +182,11 @@ char* RegisterOperation::FindKey()
|
||||
szTemp+=sizeof(BYTE);
|
||||
strcpy(szTemp,szValueName);
|
||||
szTemp+=msg.size;
|
||||
memcpy(szTemp,szValueDate,msg.valsize);
|
||||
memcpy(szTemp,szValueData,msg.valsize);
|
||||
szTemp+=msg.valsize;
|
||||
}
|
||||
free(szValueName);
|
||||
free(szValueDate);
|
||||
free(szValueData);
|
||||
}
|
||||
}
|
||||
return szBuffer;
|
||||
|
||||
@@ -261,40 +261,41 @@ void CRegisterDlg::AddKey(char* szBuffer)
|
||||
szTemp+=sizeof(BYTE);
|
||||
char* szValueName=szTemp; //ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
szTemp+=msg.size;
|
||||
BYTE* szValueDate=(BYTE*)szTemp; //ȡ<><C8A1>ֵ
|
||||
BYTE* szValueData=(BYTE*)szTemp; //ȡ<><C8A1>ֵ
|
||||
szTemp+=msg.valsize;
|
||||
if(Type==MREG_SZ) {
|
||||
int iItem=m_ControlList.InsertItem(0,szValueName,0);
|
||||
m_ControlList.SetItemText(iItem,1,"REG_SZ");
|
||||
m_ControlList.SetItemText(iItem,2,(char*)szValueDate);
|
||||
m_ControlList.SetItemText(iItem,2,(char*)szValueData);
|
||||
}
|
||||
if(Type==MREG_DWORD) {
|
||||
// <20><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD> REG_DWORD <20><><EFBFBD>͵Ĵ<CDB5><C4B4><EFBFBD>
|
||||
char ValueDate[256] = {0};
|
||||
INT_PTR d=(INT_PTR)szValueDate;
|
||||
memcpy((void*)&d,szValueDate,sizeof(INT_PTR));
|
||||
char ValueData[256] = {0};
|
||||
INT_PTR d=(INT_PTR)szValueData;
|
||||
memcpy((void*)&d,szValueData,sizeof(INT_PTR));
|
||||
CString strValue;
|
||||
strValue.Format("0x%x",d);
|
||||
sprintf(ValueDate," (%d)",d);
|
||||
sprintf(ValueData," (%d)",d);
|
||||
strValue+=" ";
|
||||
strValue+=ValueDate;
|
||||
strValue+=ValueData;
|
||||
int iItem=m_ControlList.InsertItem(0,szValueName,1);
|
||||
m_ControlList.SetItemText(iItem,1,"REG_DWORD");
|
||||
m_ControlList.SetItemText(iItem,2,strValue);
|
||||
}
|
||||
if(Type==MREG_BINARY) {
|
||||
// <20><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD> REG_BINARY <20><><EFBFBD>͵Ĵ<CDB5><C4B4><EFBFBD>
|
||||
char ValueDate[256] = {0};
|
||||
sprintf(ValueDate,"%s",szValueDate);
|
||||
char *ValueData = new char[msg.valsize+1];
|
||||
sprintf(ValueData,"%s",szValueData);
|
||||
|
||||
int iItem=m_ControlList.InsertItem(0,szValueName,1);
|
||||
m_ControlList.SetItemText(iItem,1,"REG_BINARY");
|
||||
m_ControlList.SetItemText(iItem,2,ValueDate);
|
||||
m_ControlList.SetItemText(iItem,2,ValueData);
|
||||
SAFE_DELETE_AR(ValueData);
|
||||
}
|
||||
if(Type==MREG_EXPAND_SZ) {
|
||||
int iItem=m_ControlList.InsertItem(0,szValueName,0);
|
||||
m_ControlList.SetItemText(iItem,1,"REG_EXPAND_SZ");
|
||||
m_ControlList.SetItemText(iItem,2,(char*)szValueDate);
|
||||
m_ControlList.SetItemText(iItem,2,(char*)szValueData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user