2017-02-07 21 views
0

Я пытался написать QWORD в NSIS, используя Registry Plug-inNSIS Запись QWORD HEX VALUE

!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 

Когда я проверить реестр после установки, он всегда показывает, как (недействительный QWORD (64-разрядная версия))

Я пробовал «0002000000000000», «2000000000000» и 2000000000000, но не работал. Есть идеи?

ответ

1

Данные должны быть ровно 16 шестнадцатеричных символов, без префикса 0x.

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

данные, кажется, интерпретируется как байт, а не как 64-разрядное число, и это немного неудобно, так что вы должны полностью изменить строку:

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

Это работало отлично! Большое спасибо! – qmo

 Смежные вопросы

  • Нет связанных вопросов^_^