Function at 0x667c90c0
Capabilities:
Get process heap flags
Query or enumerate registry key
Query or enumerate registry value

Disassembly:
lea ecx, [esp + 4]
and esp, 0xfffffff0
push dword [ecx - 4]
xor edx, edx
push ebp
mov ebp, esp
push edi
push esi
xor esi, esi
push ebx
mov ebx, ecx
push ecx
sub esp, 0x688
mov dword [ebp - 0x638], edx
mov eax, dword [ecx + 4]
mov dword [ebp - 0x630], esi
mov edi, dword [ecx + 0xc]
mov dword [ebp - 0x65c], eax
mov eax, dword [ecx + 8]
xor ecx, ecx
mov dword [ebp - 0x634], ecx
mov dword [ebp - 0x654], eax
xor eax, eax
test byte [0x667cc034], 8
mov dword [ebp - 0x63c], eax
jne 0x667c9410
mov edi, dword [ebp - 0x654]
mov eax, dword [ebx]
test edi, edi
sete dl
test eax, eax
sete cl
or dl, cl
mov byte [ebp - 0x650], dl
jne 0x667c9510
mov ecx, dword [ebp - 0x65c]
test ecx, ecx
je 0x667c9252
mov dword [esp + 0x10], ebx
mov edx, 0xf003f
xor esi, esi
mov dword [esp + 0xc], edx
mov dword [esp + 8], esi
mov dword [esp + 4], ecx
mov dword [esp], eax
call dword [sym.imp.advapi32.dll_RegOpenKeyExW]
sub esp, 0x14
test eax, eax
mov edx, eax
je 0x667c9250
mov dword [ebx], 0
lea eax, [ebp - 0x418]
mov dword [ebp - 0x660], eax
mov dword [ebp - 0x64c], eax
lea eax, [ebp - 0x620]
mov dword [ebp - 0x664], eax
mov esi, eax
lea esi, [esi]
cmp esi, dword [ebp - 0x664]
je 0x667c91d6
mov dword [ebp - 0x650], edx
xor edx, edx
mov dword [esp + 4], edx
mov dword [esp + 8], esi
mov eax, dword fs:[0x18]
mov eax, dword [eax + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_HeapFree]
mov edx, dword [ebp - 0x650]
sub esp, 0xc
mov ecx, dword [ebp - 0x64c]
mov eax, dword [ebp - 0x660]
cmp ecx, eax
je 0x667c9214
mov dword [esp + 8], ecx
xor edi, edi
mov dword [esp + 4], edi
mov eax, dword fs:[0x18]
mov dword [ebp - 0x64c], edx
mov eax, dword [eax + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_HeapFree]
mov edx, dword [ebp - 0x64c]
sub esp, 0xc
mov esi, dword [ebp - 0x65c]
test esi, esi
je 0x667c923c
mov eax, dword [ebx]
test eax, eax
je 0x667c923c
mov dword [esp], eax
mov dword [ebp - 0x64c], edx
call dword [sym.imp.advapi32.dll_RegCloseKey]
mov edx, dword [ebp - 0x64c]
sub esp, 4
lea esp, [ebp - 0x10]
mov eax, edx
pop ecx
pop ebx
pop esi
pop edi
pop ebp
lea esp, [ecx - 4]
ret 0x10
mov eax, dword [ebx]
lea edx, [ebp - 0x630]
xor esi, esi
mov dword [esp + 0x24], edx
lea edx, [ebp - 0x638]
xor edi, edi
mov dword [esp + 0x1c], edx
lea ecx, [ebp - 0x624]
xor edx, edx
mov dword [esp + 0x18], edx
lea edx, [ebp - 0x634]
mov dword [esp + 0x2c], esi
xor esi, esi
mov dword [esp + 0x28], edi
xor edi, edi
mov dword [esp + 0x20], ecx
xor ecx, ecx
mov dword [esp + 0x14], edx
lea edx, [ebp - 0x63c]
mov dword [esp + 4], edi
mov dword [esp + 0x10], edx
mov dword [esp + 0xc], ecx
mov dword [esp + 8], esi
mov dword [esp], eax
call dword [sym.imp.advapi32.dll_RegQueryInfoKeyW]
sub esp, 0x30
test eax, eax
mov edi, eax
jne 0x667c93e0
mov eax, dword [ebp - 0x634]
cmp dword [ebp - 0x624], eax
cmovae eax, dword [ebp - 0x624]
lea edx, [eax + 1]
cmp eax, 0x103
mov dword [ebp - 0x634], edx
ja 0x667c9588
mov eax, dword [ebp - 0x630]
cmp eax, 0x400
ja 0x667c987f
lea eax, [ebp - 0x418]
mov dword [ebp - 0x660], eax
mov dword [ebp - 0x64c], eax
lea eax, [ebp - 0x620]
mov dword [ebp - 0x664], eax
mov esi, eax
mov edx, dword [ebp - 0x63c]
test edx, edx
je 0x667c96ad
mov dword [ebp - 0x668], edi
xor eax, eax
mov dword [ebp - 0x650], eax
mov eax, dword [ebp - 0x634]
xor ecx, ecx
xor edi, edi
mov dword [esp + 0x18], edi
mov dword [esp + 0x1c], ecx
mov dword [esp + 8], esi
mov dword [ebp - 0x624], eax
xor eax, eax
mov dword [esp + 0x14], eax
xor eax, eax
mov dword [esp + 0x10], eax
lea eax, [ebp - 0x624]
mov dword [esp + 0xc], eax
mov eax, dword [ebp - 0x650]
mov dword [esp + 4], eax
mov eax, dword [ebx]
mov dword [esp], eax
call dword [sym.imp.advapi32.dll_RegEnumKeyExW]
sub esp, 0x20
test eax, eax
mov edi, eax
jne 0x667c9400
mov dword [esp + 4], esi
lea eax, [ebp - 0x62c]
xor edx, edx
mov dword [esp + 0x10], eax
mov eax, 0x20019
mov dword [esp + 0xc], eax
mov dword [esp + 8], edx
mov eax, dword [ebx]
mov dword [esp], eax
call dword [sym.imp.advapi32.dll_RegOpenKeyExW]
sub esp, 0x14
test eax, eax
mov edi, eax
je 0x667c9608
mov dword [ebp - 0x650], edi
mov eax, dword [ebp - 0x62c]
mov dword [esp], eax
call dword [sym.imp.advapi32.dll_RegCloseKey]
mov edx, dword [ebp - 0x650]
push eax
jmp 0x667c91a0
lea eax, [ebp - 0x418]
mov dword [ebp - 0x660], eax
mov dword [ebp - 0x64c], eax
lea eax, [ebp - 0x620]
mov dword [ebp - 0x664], eax
mov esi, eax
mov edx, edi
jmp 0x667c91a0
mov eax, dword [ebp - 0x65c]
test eax, eax
je 0x667c9875
shr eax, 0x10
je 0x667c9528
mov esi, dword [ebp - 0x65c]
mov eax, 0xffffffff
mov dword [esp + 4], eax
mov dword [esp], esi
call dword [sym.imp.kernel32.dll_IsBadStringPtrW]
sub esp, 8
test eax, eax
jne 0x667c9868
cmp word [esi], 0
je 0x667c98d7
mov ecx, esi
lea esi, [esi]
lea esi, [esi]
mov edx, eax
cmp word [ecx + edx*2 + 2], 0
lea eax, [eax + 1]
jne 0x667c9460
mov dword [ebp - 0x64c], edi
mov ecx, 0x224c
mov esi, dword [ebp - 0x65c]
mov word [ebp - 0x418], cx
lea ecx, [ebp - 0x416]
mov dword [ebp - 0x650], ebx
jmp 0x667c94db
cmp eax, 9
je 0x667c9798
cmp eax, 0xa
jne 0x667c97c2
mov word [ecx], 0x6e5c
add ecx, 2
lea esi, [esi]
lea esi, [esi]
lea ebx, [ebp - 0x2f6]
lea eax, [edx - 1]
cmp ecx, ebx
ja 0x667c9820
test edx, edx
jle 0x667c9820
mov edx, eax
movzx eax, word [esi]
add esi, 2
cmp eax, 0xd
je 0x667c97a8
jbe 0x667c9498
cmp eax, 0x22
je 0x667c9810
cmp eax, 0x5c
jne 0x667c97b5
mov word [ecx], 0x5c5c
add ecx, 2
jmp 0x667c94c0
lea esp, [ebp - 0x10]
mov edx, 0x57
pop ecx
mov eax, edx
pop ebx
pop esi
pop edi
pop ebp
lea esp, [ecx - 4]
ret 0x10
mov dword [esp], str._04x
movzx eax, word [ebp - 0x65c]
mov dword [esp + 4], eax
call sym._wine_dbg_sprintf
mov dword [esp + 0x1c], edi
mov ecx, dword [ebp - 0x654]
mov dword [esp + 0x14], eax
mov dword [esp + 0x18], ecx
mov eax, dword [ebx]
mov dword [esp], 3
mov dword [esp + 0x10], eax
mov eax, str._p___s___p___ld._n
mov dword [esp + 0xc], eax
mov eax, str.SHCopyKeyW
mov dword [esp + 8], eax
mov eax, 0x667cc034
mov dword [esp + 4], eax
call sym._wine_dbg_log.constprop.0
jmp 0x667c911b
add edx, edx
xor ecx, ecx
mov dword [esp + 4], ecx
mov ecx, dword [sym.imp.kernel32.dll_HeapAlloc]
mov dword [esp + 8], edx
mov eax, dword fs:[0x18]
mov eax, dword [eax + 0x30]
mov dword [ebp - 0x64c], ecx
mov eax, dword [eax + 0x18]
mov dword [esp], eax
call ecx
mov ecx, dword [ebp - 0x64c]
mov esi, eax
mov eax, dword [ebp - 0x630]
sub esp, 0xc
cmp eax, 0x400
ja 0x667c98f8
lea ecx, [ebp - 0x418]
test esi, esi
mov dword [ebp - 0x660], ecx
sete al
mov dword [ebp - 0x64c], ecx
lea ecx, [ebp - 0x620]
mov dword [ebp - 0x664], ecx
test al, al
je 0x667c9316
mov edi, 8
mov edx, edi
jmp 0x667c91a0
mov dword [esp + 4], esi
lea eax, [ebp - 0x628]
mov dword [esp + 8], eax
mov eax, dword [ebp - 0x654]
mov dword [esp], eax
call dword [sym.imp.advapi32.dll_RegCreateKeyW]
sub esp, 0xc
test eax, eax
mov edi, eax
jne 0x667c93b7
xor eax, eax
mov dword [esp + 0xc], eax
mov eax, dword [ebp - 0x628]
mov dword [esp + 8], eax
xor eax, eax
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x62c]
mov dword [esp], eax
call sym.shcore.dll_SHCopyKeyW
mov edx, dword [sym.imp.advapi32.dll_RegCloseKey]
mov dword [ebp - 0x658], edx
mov edi, eax
mov eax, dword [ebp - 0x628]
sub esp, 0x10
mov dword [esp], eax
call edx
mov eax, dword [ebp - 0x62c]
mov edx, dword [ebp - 0x658]
sub esp, 4
mov dword [esp], eax
call edx
inc dword [ebp - 0x650]
mov eax, dword [ebp - 0x650]
sub esp, 4
cmp dword [ebp - 0x63c], eax
jbe 0x667c96a5
test edi, edi
je 0x667c9332
mov edx, edi
mov edi, dword [ebp - 0x668]
mov eax, dword [ebp - 0x638]
test eax, eax
je 0x667c91a0
test edx, edx
jne 0x667c91a0
lea eax, [ebp - 0x628]
mov dword [ebp - 0x650], eax
jmp 0x667c9728
mov eax, dword [ebp - 0x624]
xor ecx, ecx
inc edi
mov dword [esp + 8], esi
mov dword [esp + 4], ecx
mov dword [esp + 0x14], eax
mov eax, dword [ebp - 0x64c]
mov dword [esp + 0x10], eax
mov eax, dword [ebp - 0x628]
mov dword [esp + 0xc], eax
mov eax, dword [ebp - 0x654]
mov dword [esp], eax
call sym.shcore.dll_SHSetValueW
sub esp, 0x18
mov edx, eax
cmp dword [ebp - 0x638], edi
jbe 0x667c91a0
test eax, eax
jne 0x667c91a0
mov dword [esp + 8], esi
mov eax, dword [ebp - 0x634]
mov dword [esp + 4], edi
mov dword [ebp - 0x62c], eax
mov eax, dword [ebp - 0x630]
mov dword [ebp - 0x624], eax
lea eax, [ebp - 0x624]
mov dword [esp + 0x1c], eax
mov eax, dword [ebp - 0x64c]
mov dword [esp + 0x18], eax
mov eax, dword [ebp - 0x650]
mov dword [esp + 0x14], eax
xor eax, eax
mov dword [esp + 0x10], eax
lea eax, [ebp - 0x62c]
mov dword [esp + 0xc], eax
mov eax, dword [ebx]
mov dword [esp], eax
call dword [sym.imp.advapi32.dll_RegEnumValueW]
sub esp, 0x20
test eax, eax
mov edx, eax
jne 0x667c91a0
jmp 0x667c96d8
mov word [ecx], 0x745c
add ecx, 2
jmp 0x667c94c0
mov word [ecx], 0x725c
add ecx, 2
jmp 0x667c94c0
lea edi, [eax - 0x20]
cmp di, 0x5e
jbe 0x667c9860
mov byte [ecx], 0x5c
mov edi, eax
add ecx, 5
shr edi, 0xc
movzx ebx, byte [edi + str.0123456789abcdefSHCreateStreamOnFileA]
mov edi, eax
shr edi, 8
and edi, 0xf
mov byte [ecx - 4], bl
movzx ebx, byte [edi + str.0123456789abcdefSHCreateStreamOnFileA]
mov edi, eax
shr edi, 4
and eax, 0xf
and edi, 0xf
movzx eax, byte [eax + str.0123456789abcdefSHCreateStreamOnFileA]
mov byte [ecx - 3], bl
movzx ebx, byte [edi + str.0123456789abcdefSHCreateStreamOnFileA]
mov byte [ecx - 1], al
mov byte [ecx - 2], bl
jmp 0x667c94c0
mov word [ecx], 0x225c
add ecx, 2
jmp 0x667c94c0
test eax, eax
mov edi, dword [ebp - 0x64c]
mov byte [ecx], 0x22
mov ebx, dword [ebp - 0x650]
jle 0x667c98f0
mov word [ecx + 1], 0x2e2e
lea eax, [ecx + 4]
mov byte [ecx + 3], 0x2e
mov byte [eax], 0
lea eax, [ebp - 0x418]
mov dword [esp], eax
call sym.___wine_dbg_strdup
jmp 0x667c953f
mov byte [ecx], al
inc ecx
jmp 0x667c94c0
mov eax, str._invalid_
lea esi, [esi]
jmp 0x667c953f
mov eax, str._null_
jmp 0x667c953f
lea ecx, [ebp - 0x620]
mov dword [ebp - 0x664], ecx
mov esi, ecx
mov ecx, dword [sym.imp.kernel32.dll_HeapAlloc]
mov dword [esp + 8], eax
xor eax, eax
mov dword [esp + 4], eax
mov edx, dword fs:[0x18]
mov eax, dword [edx + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
call ecx
movzx edx, byte [ebp - 0x650]
lea ecx, [ebp - 0x418]
mov dword [ebp - 0x660], ecx
mov dword [ebp - 0x64c], eax
sub esp, 0xc
test eax, eax
sete al
or al, dl
jmp 0x667c95f0
mov byte [ebp - 0x416], 0x22
lea ecx, [ebp - 0x416]
mov edx, 0x224c
mov word [ebp - 0x418], dx
lea eax, [ecx + 1]
jmp 0x667c9844
lea edx, [ebp - 0x620]
test esi, esi
sete byte [ebp - 0x650]
mov dword [ebp - 0x664], edx
jmp 0x667c9893