Assembly MASM将DWORD写入注册表

Assembly MASM将DWORD写入注册表,assembly,masm,masm32,Assembly,Masm,Masm32,我正在尝试向注册表写入DWORD,我喜欢这样: WSTR keyvalue,"0" invoke RegCreateKeyExW,HKEY_LOCAL_MACHINE,offset keylocation,NULL,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,offset hIDKey,NULL .IF eax==ERROR_SUCCESS invoke lstrlenW,offset keyv

我正在尝试向注册表写入DWORD,我喜欢这样:

 WSTR keyvalue,"0"

       invoke RegCreateKeyExW,HKEY_LOCAL_MACHINE,offset keylocation,NULL,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,offset hIDKey,NULL 
      .IF eax==ERROR_SUCCESS
        invoke lstrlenW,offset keyvalue
        add eax,eax
        add eax,2
        invoke RegSetValueExW,hIDKey,offset keyname,NULL,REG_DWORD,offset keyvalue,eax 
        invoke RegFlushKey,hIDKey
        .ENDIF 

keyvalue是0,所以我希望注册表中的键为0,但它会写“38”。我做错了什么?

字符0是0x38,您保留了一个宽字符串(
WSTR keyvalue
),因此这是意料之中的。您需要dword值0(其大小固定,因此不需要
\u wcslen
)。比如:

keyvalue DD 0
....
mov eax,4
....