2017-02-07 7 views
0

내가 사용 NSIS에서 QWORD를 작성하려고했던 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