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