Question

I'm trying to write a DWORD to registry, I do like this:

 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 is 0, so I'm expecting a 0 in the registry for the key, but instead it writes "38". What am I doing wrong ?

Was it helpful?

Solution

Character 0 is 0x38, and you reserve a wide string (WSTR keyvalue), so it is to be expected. You need the dword value 0 (which has a fixed size, so you don't need _wcslen). Something like:

keyvalue DD 0
....
mov eax,4
....
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top