Fix: Viewing registry causing master program crash

This commit is contained in:
yuanyuanxiang
2025-11-22 18:23:23 +08:00
parent a7d44439bf
commit e602a8a235
2 changed files with 27 additions and 26 deletions

View File

@@ -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;

View File

@@ -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);
} }
} }
} }