applied patch #1340255 - nicer registry commands log

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@4415 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2005-11-24 16:45:04 +00:00
parent 2a70ad3052
commit d0f1bae314
3 changed files with 72 additions and 6 deletions

View file

@ -1129,6 +1129,7 @@ static int NSISCALL ExecuteEntry(entry *entry_)
case EW_DELREG:
{
long res=!ERROR_SUCCESS;
const char *rkn=RegKeyHandleToName((HKEY)parm1);
if (!parm4)
{
HKEY hKey=myRegOpenKey(KEY_SET_VALUE);
@ -1136,14 +1137,14 @@ static int NSISCALL ExecuteEntry(entry *entry_)
{
char *buf3=GetStringFromParm(0x33);
res = RegDeleteValue(hKey,buf3);
log_printf4("DeleteRegValue: %d\\%s\\%s",parm1,buf2,buf3);
log_printf4("DeleteRegValue: \"%s\\%s\" \"%s\"",rkn,buf2,buf3);
RegCloseKey(hKey);
}
}
else
{
char *buf2=GetStringFromParm(0x22);
log_printf3("DeleteRegKey: %d\\%s",parm1,buf2);
log_printf3("DeleteRegKey: \"%s\\%s\"",rkn,buf2);
res = myRegDeleteKeyEx(GetRegRootKey(parm1),buf2,parm4&2);
}
if (res != ERROR_SUCCESS)
@ -1158,6 +1159,8 @@ static int NSISCALL ExecuteEntry(entry *entry_)
int rtype=parm5;
char *buf0=GetStringFromParm(0x02);
char *buf1=GetStringFromParm(0x11);
const char *rkn=RegKeyHandleToName(rootkey);
exec_error++;
if (RegCreateKeyEx(rootkey,buf1,0,0,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,0,&hKey,0) == ERROR_SUCCESS)
{
@ -1167,25 +1170,35 @@ static int NSISCALL ExecuteEntry(entry *entry_)
{
GetStringFromParm(0x23);
size = mystrlen((char *) data) + 1;
log_printf5("WriteRegStr: set %d\\%s\\%s to %s",rootkey,buf1,buf0,data);
if (rtype == REG_SZ)
{
log_printf5("WriteRegStr: \"%s\\%s\" \"%s\"=\"%s\"",rkn,buf1,buf0,data);
}
else
{
log_printf5("WriteRegExpandStr: \"%s\\%s\" \"%s\"=\"%s\"",rkn,buf1,buf0,data);
}
}
if (type == REG_DWORD)
{
*(LPDWORD) data = GetIntFromParm(3);
size = sizeof(DWORD);
log_printf5("WriteRegDWORD: set %d\\%s\\%s to %d",rootkey,buf1,buf0,*(LPDWORD)data);
log_printf5("WriteRegDWORD: \"%s\\%s\" \"%s\"=\"%08x\"",rkn,buf1,buf0,*(LPDWORD) data);
}
if (type == REG_BINARY)
{
char binbuf[128];
// use buf2, buf3 and buf4
size = GetCompressedDataFromDataBlockToMemory(parm3, data, 3 * NSIS_MAX_STRLEN);
log_printf5("WriteRegBin: set %d\\%s\\%s with %d bytes",rootkey,buf1,buf0,size);
LogData2Hex(binbuf, sizeof(binbuf), data, size);
log_printf5("WriteRegBin: \"%s\\%s\" \"%s\"=\"%s\"",rkn,buf1,buf0,binbuf);
}
if (size >= 0 && RegSetValueEx(hKey,buf0,0,rtype,data,size) == ERROR_SUCCESS)
exec_error--;
RegCloseKey(hKey);
}
else { log_printf3("WriteReg: error creating key %d\\%s",rootkey,buf1); }
else { log_printf3("WriteReg: error creating key \"%s\\%s\"",buf3,buf1); }
}
break;
case EW_READREGSTR: // read registry string

View file

@ -760,6 +760,53 @@ void NSISCALL log_write(int close)
}
#endif//!NSIS_CONFIG_LOG_ODS
const char * _RegKeyHandleToName(HKEY hKey)
{
if (hKey == HKEY_CLASSES_ROOT)
return "HKEY_CLASSES_ROOT";
else if (hKey == HKEY_CURRENT_USER)
return "HKEY_CURRENT_USER";
else if (hKey == HKEY_LOCAL_MACHINE)
return "HKEY_LOCAL_MACHINE";
else if (hKey == HKEY_USERS)
return "HKEY_USERS";
else if (hKey == HKEY_PERFORMANCE_DATA)
return "HKEY_PERFORMANCE_DATA";
else if (hKey == HKEY_CURRENT_CONFIG)
return "HKEY_CURRENT_CONFIG";
else if (hKey == HKEY_DYN_DATA)
return "HKEY_DYN_DATA";
else
return "invalid registry key";
}
void _LogData2Hex(char *buf, size_t buflen, unsigned char *data, size_t datalen)
{
char *p = buf;
size_t i;
int dots = 0;
size_t bufbytes = buflen / 3; // 2 hex digits, one space/null
if (datalen > bufbytes)
{
bufbytes--;
dots = 1;
}
else
bufbytes = datalen;
for (i = 0; i < bufbytes; i++)
{
wsprintf(p, "%02x%c", data[i], (i == bufbytes - 1) ? '\0' : ' ');
p += 3;
}
if (dots)
mystrcat(buf, "...");
}
void log_printf(char *format, ...)
{
va_list val;

View file

@ -30,6 +30,8 @@ int NSISCALL my_GetDialogItemText(UINT idx, char *val);
#ifdef NSIS_CONFIG_LOG
extern char log_text[NSIS_MAX_STRLEN*4];
void NSISCALL log_write(int close);
const char * _RegKeyHandleToName(HKEY hKey);
void _LogData2Hex(char *buf, size_t buflen, unsigned char *data, size_t datalen);
void log_printf(char *format, ...);
#define log_printf2(x1,x2) log_printf(x1,x2);
#define log_printf3(x1,x2,x3) log_printf(x1,x2,x3);
@ -38,6 +40,8 @@ void log_printf(char *format, ...);
#define log_printf6(x1,x2,x3,x4,x5,x6) log_printf(x1,x2,x3,x4,x5,x6);
#define log_printf7(x1,x2,x3,x4,x5,x6,x7) log_printf(x1,x2,x3,x4,x5,x6,x7);
#define log_printf8(x1,x2,x3,x4,x5,x6,x7,x8) log_printf(x1,x2,x3,x4,x5,x6,x7,x8);
#define RegKeyHandleToName(x1) _RegKeyHandleToName(x1);
#define LogData2Hex(x1,x2,x3,x4) _LogData2Hex(x1,x2,x3,x4);
extern int log_dolog;
extern char g_log_file[1024];
#else
@ -49,6 +53,8 @@ extern char g_log_file[1024];
#define log_printf6(x1,x2,x3,x4,x5,x6)
#define log_printf7(x1,x2,x3,x4,x5,x6,x7)
#define log_printf8(x1,x2,x3,x4,x5,x6,x7,x8)
#define RegKeyHandleToName(x1) NULL
#define LogData2Hex(x1,x2,x3,x4)
#endif
HANDLE NSISCALL myCreateProcess(char *cmd, char *dir);