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\ */
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;

View File

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