2017-02-07 2 views
0

Ich habe versucht, eine QWORD in NSIS zu schreiben mit der Registry Plug-inNSIS Schreiben QWORD Hexwert

!define REG "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\some.exe" 
!define REG_VALUE "MitigationOptions" 
!define REG_DATA 0x2000000000000 

${registry::Write} "HKLM\${REG}" "${REG_VALUE}" ${REG_DATA} "REG_QWORD" $R0 

Wenn ich die Registrierung nach der Installation überprüfen, es zeigt immer als (ungültige QWORD (64-Bit) Wert)

Ich habe versucht "0002000000000000", "2000000000000" und 2000000000000 aber nicht gearbeitet. Irgendeine Idee?

Antwort

1

Die Daten müssen genau 16 hex Zeichen lang, keine 0x Präfix sein.

!include "Registry.nsh" 
Section 
${registry::Write} "HKCU\Software\NSIS\Test" "Test DW64" "112233445566aabb" "REG_QWORD" $R0 
DetailPrint $R0 
SectionEnd 

Die Daten scheinen, als Bytes zu interpretieren und nicht als 64-Bit-Zahl, und das ist ein wenig umständlich, so dass Sie die Zeichenfolge umkehren müssen:

Function StrRev 
Exch $0 
Push $1 
Push $2 
Push $3 
StrCpy $3 "" 
StrCpy $1 0 
loop: 
    StrCpy $2 $0 1 $1 
    StrCmp $2 "" done 
    IntOp $1 $1 + 1 
    StrCpy $3 $2$3 
    Goto loop 
done: 
StrCpy $0 $3 
Pop $3 
Pop $2 
Pop $1 
Exch $0 
FunctionEnd 

Section 
Push "112233445566aabb" 
Call StrRev 
Pop $0 
${registry::Write} "HKCU\Software\NSIS\Test" "Test DW64" "$0" "REG_QWORD" $R0 
SectionEnd 
+0

Das funktionierte großartig! Danke vielmals! – qmo