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:
parent
2a70ad3052
commit
d0f1bae314
3 changed files with 72 additions and 6 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue