REG_MULTI_SZ reader problem
Hi,
I am trying to use the REG_MULTI_SZ reader posted in the Archives and am failing to get it to run for me.
I would like to read the PagingFiles memory setting -- and then set them if they are not correct. After I get the read method to work, I will try the writer.
I only edited the three lines between the "Edited this" and "Stop editing" AND I took out the 'bla' and put in the ${Value} about line 86:
System::Call "${RegQueryValueEx}(r4, ${VALUE}, 0, 0, r1, r2) .r3"
I keep getting: "Can't query registry value (2)[2]"
Also, where can I read about the meaning of a system call function like: System::Call "*(i) i (0) .r0"
I am having trouble understanding that call and similar ones.
Thanks to all.
Here is the code:
OutFile "REG_MULTI_SZ Reader.exe"
Name "REG_MULTI_SZ Reader"
ShowInstDetails show
!define HKEY_CLASSES_ROOT 0x80000000
!define HKEY_CURRENT_USER 0x80000001
!define HKEY_LOCAL_MACHINE 0x80000002
!define HKEY_USERS 0x80000003
!define HKEY_PERFORMANCE_DATA 0x80000004
!define HKEY_PERFORMANCE_TEXT 0x80000050
!define HKEY_PERFORMANCE_NLSTEXT 0x80000060
!define HKEY_CURRENT_CONFIG 0x80000005
!define HKEY_DYN_DATA 0x80000006
!define KEY_QUERY_VALUE 0x0001
!define KEY_ENUMERATE_SUB_KEYS 0x0008
!define REG_MULTI_SZ 7
!define RegOpenKeyEx "Advapi32::RegOpenKeyExA(i, t, i, i, i) i"
!define RegQueryValueEx "Advapi32::RegQueryValueExA(i, t, i, i, i, i) i"
!define RegCloseKey "Advapi32::RegCloseKeyA(i) i"
####### Edited this!
!define ROOT_KEY ${HKEY_LOCAL_MACHINE}
!define SUB_KEY "SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management"
!define VALUE "PagingFiles"
####### Stop editing
Section "Read"
StrCpy $0 ""
StrCpy $1 ""
StrCpy $2 ""
StrCpy $3 ""
SetPluginUnload alwaysoff
System::Call "*(i) i (0) .r0"
System::Call "*(i) i (0) .r1"
System::Call "*(i) i (0) .r2"
System::Call "${RegOpenKeyEx}(${ROOT_KEY}, '${SUB_KEY}', \
0, ${KEY_QUERY_VALUE}|${KEY_ENUMERATE_SUB_KEYS}, r0) .r3"
StrCmp $3 0 goon
MessageBox MB_OK|MB_ICONSTOP "Can't open registry key! ($3)"
Goto done
goon:
System::Call "*$0(&i4 .r4)"
System::Call "${RegQueryValueEx}(r4, '${VALUE}', 0, r1, 0, r2) .r3"
StrCmp $3 0 read
MessageBox MB_OK|MB_ICONSTOP "Can't query registry value! ($3)"
Goto done
read:
System::Call "*$1(&i4 .r3)"
StrCmp $3 ${REG_MULTI_SZ} multisz
MessageBox MB_OK|MB_ICONSTOP "Registry value no SZ_MULTI_SZ! ($3)"
Goto done
multisz:
System::Call "*$2(&i4 .r3)"
StrCmp $3 0 0 multiszalloc
MessageBox MB_OK|MB_ICONSTOP "Registry value empty! ($3)"
Goto done
multiszalloc:
System::Free $1
System::Alloc $3
Pop $1
StrCmp $1 0 0 multiszget
MessageBox MB_OK|MB_ICONSTOP "Can't allocate enough memory! ($3)"
Goto done
multiszget:
System::Call "${RegQueryValueEx}(r4, ${VALUE}, 0, 0, r1, r2) .r3"
StrCmp $3 0 multiszprocess
MessageBox MB_OK|MB_ICONSTOP "Can't query registry value! ($3)[2]"
Goto done
multiszprocess:
StrCpy $4 $1
loop:
System::Call "*$4(&t${NSIS_MAX_STRLEN} .r3)"
StrCmp $3 "" done
DetailPrint $3
StrLen $5 $3
IntOp $4 $4 + $5
IntOp $4 $4 + 1
Goto loop
done:
System::Free $2
System::Free $1
StrCmp $0 0 noClose
System::Call "${RegCloseKey}(r0)"
noClose:
SetPluginUnload manual
System::Free $0
SectionEnd