Function at 0x703c9010
Capabilities:
Delete registry key
Set registry value

Disassembly:
push ebp
mov ebp, esp
push edi
push esi
mov esi, ecx
push ebx
sub esp, 0x7c
mov dword [ebp - 0x44], eax
mov eax, dword [eax]
mov dword [ebp - 0x40], edx
mov edx, ecx
mov dword [ebp - 0x30], eax
lea eax, [ebp - 0x30]
mov dword [ebp - 0x2c], 0
call sym._get_word
mov edi, eax
test eax, eax
js 0x703c9212
mov eax, dword [sym.imp.ucrtbase.dll_malloc]
mov dword [esp], 0x100
mov dword [ebp - 0x48], eax
call eax
mov dword [ebp - 0x20], pe_nt_image_headers32
mov dword [ebp - 0x24], eax
mov dword [ebp - 0x1c], 0
mov dword [ebp - 0x3c], 0
jmp 0x703c9190
mov dword [esp + 4], str.ForceRemove
mov eax, dword [esi]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_lstrcmpiW]
mov dword [ebp - 0x3c], 3
sub esp, 8
test eax, eax
jne 0x703c9320
mov edx, esi
lea eax, [ebp - 0x30]
call sym._get_word
mov edi, eax
test eax, eax
js 0x703c91e0
test byte [0x703cd038], 8
jne 0x703c9288
mov eax, dword [ebp + 8]
test eax, eax
je 0x703c9220
cmp dword [ebp - 0x3c], 2
mov ebx, dword [esi]
je 0x703c9438
cmp dword [ebp - 0x3c], 4
je 0x703c9410
cmp dword [ebp - 0x3c], 3
je 0x703c96c0
lea eax, [ebp - 0x2c]
mov dword [esp + 4], ebx
mov dword [esp + 8], eax
mov eax, dword [ebp - 0x40]
mov dword [esp], eax
call dword [sym.imp.advapi32.dll_RegCreateKeyW]
sub esp, 0xc
mov edi, eax
test eax, eax
jne 0x703c9a40
mov edx, dword [ebp - 0x30]
cmp word [edx], 0x3d
je 0x703c945a
mov eax, dword [ebp - 0x3c]
sub eax, 2
and eax, 0xfffffffd
cmp dword [ebp - 0x3c], 2
setne bl
test eax, eax
je 0x703c9133
mov eax, dword [ebp - 0x30]
cmp word [eax], 0x7b
je 0x703c93c5
test byte [0x703cd038], 8
jne 0x703c924d
mov eax, dword [ebp + 8]
test eax, eax
jne 0x703c915b
mov eax, dword [ebp - 0x3c]
test eax, eax
je 0x703c92f8
cmp eax, 3
je 0x703c92f8
mov eax, dword [ebp - 0x2c]
test eax, eax
je 0x703c9172
test bl, bl
je 0x703c9172
mov dword [esp], eax
call dword [sym.imp.advapi32.dll_RegCloseKey]
sub esp, 4
mov edx, esi
lea eax, [ebp - 0x30]
mov dword [ebp - 0x2c], 0
mov dword [ebp - 0x1c], 0
call sym._get_word
mov edi, eax
test eax, eax
js 0x703c91e7
mov eax, dword [esi]
cmp word [eax + 2], 0
jne 0x703c919f
cmp word [eax], 0x7d
je 0x703c91e0
mov dword [esp + 4], str.NoRemove
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_lstrcmpiW]
sub esp, 8
test eax, eax
jne 0x703c9070
mov edx, esi
lea eax, [ebp - 0x30]
mov dword [ebp - 0x3c], 1
call sym._get_word
mov edi, eax
test eax, eax
jns 0x703c90a9
lea esi, [esi]
lea esi, [esi]
cmp dword [ebp - 0x3c], 2
setne bl
mov eax, dword [ebp - 0x24]
mov dword [esp], eax
call dword [sym.imp.ucrtbase.dll_free]
mov eax, dword [ebp - 0x2c]
test eax, eax
je 0x703c920a
test bl, bl
je 0x703c920a
mov dword [esp], eax
call dword [sym.imp.advapi32.dll_RegCloseKey]
sub esp, 4
mov eax, dword [ebp - 0x30]
mov ecx, dword [ebp - 0x44]
mov dword [ecx], eax
lea esp, [ebp - 0xc]
mov eax, edi
pop ebx
pop esi
pop edi
pop ebp
ret
mov eax, dword [ebp - 0x3c]
sub eax, 2
test eax, 0xfffffffd
jne 0x703c9370
cmp dword [ebp - 0x3c], 4
jne 0x703c9538
mov ebx, 1
test byte [0x703cd038], 8
je 0x703c9140
mov eax, dword [ebp - 0x3c]
mov dword [esp + 0xc], str._x__x_n
mov dword [esp + 8], str.do_process_key
mov dword [esp + 0x14], eax
mov eax, dword [ebp + 8]
mov dword [esp + 4], 0x703cd038
mov dword [esp + 0x10], eax
mov dword [esp], 3
call sym._wine_dbg_log.constprop.0_2
jmp 0x703c9140
mov ebx, dword [esi]
test ebx, ebx
je 0x703c96b0
mov eax, ebx
shr eax, 0x10
je 0x703c9578
mov dword [esp + 4], 0xffffffff
mov dword [esp], ebx
call dword [sym.imp.kernel32.dll_IsBadStringPtrW]
mov edx, eax
sub esp, 8
mov eax, str._invalid_
test edx, edx
jne 0x703c92c8
mov edx, 0xffffffff
mov eax, ebx
call sym._wine_dbgstr_wn.part.0
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.name___s_n
mov dword [esp + 8], str.do_process_key
mov dword [esp + 4], 0x703cd038
mov dword [esp], 3
call sym._wine_dbg_log.constprop.0_2
jmp 0x703c90b6
test byte [0x703cd038], 8
jne 0x703c9640
mov eax, dword [ebp - 0x24]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x40]
mov dword [esp], eax
call dword [sym.imp.advapi32.dll_RegDeleteKeyW]
sub esp, 8
jmp 0x703c915b
mov dword [esp + 4], 0x703d080e
mov eax, dword [esi]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_lstrcmpiW]
mov dword [ebp - 0x3c], 2
sub esp, 8
test eax, eax
je 0x703c9095
mov dword [esp + 4], str.Delete
mov eax, dword [esi]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_lstrcmpiW]
sub esp, 8
test eax, eax
jne 0x703c9750
mov dword [ebp - 0x3c], 4
jmp 0x703c9095
mov eax, dword [esi]
mov ecx, 0xffffffff
lea edx, [ebp - 0x24]
call sym._strbuf_write
lea eax, [ebp - 0x2c]
mov dword [esp + 8], eax
mov eax, dword [esi]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x40]
mov dword [esp], eax
call dword [sym.imp.advapi32.dll_RegOpenKeyW]
sub esp, 0xc
mov ebx, eax
test eax, eax
jne 0x703c9590
mov eax, dword [ebp - 0x30]
cmp word [eax], 0x3d
mov edx, eax
je 0x703c945a
cmp dword [ebp - 0x3c], 2
setne bl
cmp word [eax], 0x7b
jne 0x703c9133
movzx eax, word [eax + 2]
mov dword [esp], eax
call dword [sym.imp.ucrtbase.dll_iswspace]
test eax, eax
je 0x703c9133
mov edx, esi
lea eax, [ebp - 0x30]
call sym._get_word
mov edi, eax
test eax, eax
js 0x703c91e7
mov eax, dword [ebp + 8]
mov edx, dword [ebp - 0x2c]
mov ecx, esi
mov dword [esp], eax
lea eax, [ebp - 0x30]
call sym._do_process_key
mov edi, eax
test eax, eax
jns 0x703c9133
jmp 0x703c91e7
test byte [0x703cd038], 8
jne 0x703c96e0
mov eax, dword [ebp - 0x40]
mov dword [esp + 4], ebx
mov dword [esp], eax
call dword [sym.imp.advapi32.dll_RegDeleteTreeW]
sub esp, 8
jmp 0x703c923b
mov eax, dword [ebp - 0x40]
lea edx, [ebp - 0x24]
mov ecx, 0xffffffff
mov dword [ebp - 0x2c], eax
mov eax, ebx
call sym._strbuf_write
mov edx, dword [ebp - 0x30]
cmp word [edx], 0x3d
jne 0x703c9550
add edx, 2
lea eax, [ebp - 0x30]
mov dword [ebp - 0x30], edx
mov edx, esi
call sym._get_word
mov edi, eax
test eax, eax
js 0x703c91e0
cmp dword [esi + 8], 1
jne 0x703c9ae7
mov eax, dword [ebp + 8]
test eax, eax
je 0x703c9610
mov ecx, dword [esi]
movzx eax, word [ecx]
cmp ax, 0x64
je 0x703c9838
cmp ax, 0x73
je 0x703c9790
cmp ax, 0x62
je 0x703c98d8
cmp dword [ebp - 0x3c], 2
mov edi, 0x80020009
setne bl
test byte [0x703cd038], 4
je 0x703c91e7
mov eax, ecx
shr eax, 0x10
je 0x703c9b8b
mov dword [esp + 4], 0xffffffff
mov dword [esp], ecx
mov dword [ebp - 0x3c], ecx
call dword [sym.imp.kernel32.dll_IsBadStringPtrW]
mov edx, eax
sub esp, 8
mov eax, str._invalid_
test edx, edx
jne 0x703c9501
mov ecx, dword [ebp - 0x3c]
mov edx, 0xffffffff
mov eax, ecx
call sym._wine_dbgstr_wn.part.0
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.Wrong_resource_type:__s_n
mov dword [esp + 8], str.do_process_key
mov edi, 0x80020009
mov dword [esp + 4], 0x703cd038
mov dword [esp], 2
call sym._wine_dbg_log.constprop.0_2
jmp 0x703c91e7
mov edx, dword [ebp - 0x30]
cmp word [edx], 0x3d
je 0x703c945a
cmp dword [ebp - 0x3c], 2
jne 0x703c9118
nop
test byte [0x703cd038], 4
jne 0x703c9a17
mov eax, dword [ebp - 0x24]
mov edi, 0x80020009
mov dword [esp], eax
call dword [sym.imp.ucrtbase.dll_free]
jmp 0x703c920a
movzx ebx, bx
mov dword [esp], str._04x
mov dword [esp + 4], ebx
call sym._wine_dbg_sprintf_2
jmp 0x703c92c8
test byte [0x703cd038], 4
je 0x703c93a5
mov edi, dword [ebp - 0x24]
test edi, edi
je 0x703c9a68
mov eax, edi
shr eax, 0x10
je 0x703c99ff
mov dword [esp + 4], 0xffffffff
mov dword [esp], edi
call dword [sym.imp.kernel32.dll_IsBadStringPtrW]
mov edx, eax
sub esp, 8
mov eax, str._invalid_
test edx, edx
jne 0x703c95de
mov edx, 0xffffffff
mov eax, edi
call sym._wine_dbgstr_wn.part.0
mov dword [esp + 0x14], ebx
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.Could_not_open_key__s:__08lx_n
mov dword [esp + 8], str.do_process_key
mov dword [esp + 4], 0x703cd038
mov dword [esp], 2
call sym._wine_dbg_log.constprop.0_2
jmp 0x703c93a5
mov eax, dword [ebp - 0x30]
cmp word [eax], 0x2d
jne 0x703c961f
add eax, 2
mov dword [ebp - 0x30], eax
mov edx, esi
lea eax, [ebp - 0x30]
call sym._get_word
mov edi, eax
test edi, edi
js 0x703c91e0
mov eax, dword [ebp - 0x3c]
sub eax, 2
jmp 0x703c9118
mov edi, dword [ebp - 0x24]
test edi, edi
je 0x703c99d0
mov eax, edi
shr eax, 0x10
je 0x703c9778
mov dword [esp + 4], 0xffffffff
mov dword [esp], edi
call dword [sym.imp.kernel32.dll_IsBadStringPtrW]
mov edx, eax
sub esp, 8
mov eax, str._invalid_
test edx, edx
jne 0x703c9681
mov edx, 0xffffffff
mov eax, edi
call sym._wine_dbgstr_wn.part.0
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.Deleting__s_n
mov dword [esp + 8], str.do_process_key
mov dword [esp + 4], 0x703cd038
mov dword [esp], 3
call sym._wine_dbg_log.constprop.0_2
jmp 0x703c9305
mov eax, str._null_
jmp 0x703c92c8
mov eax, dword [ebp - 0x40]
mov dword [esp + 4], ebx
mov dword [esp], eax
call dword [sym.imp.advapi32.dll_RegDeleteTreeW]
mov ebx, dword [esi]
sub esp, 8
jmp 0x703c90e1
test ebx, ebx
je 0x703c99f5
mov eax, ebx
shr eax, 0x10
je 0x703c9760
mov dword [esp + 4], 0xffffffff
mov dword [esp], ebx
call dword [sym.imp.kernel32.dll_IsBadStringPtrW]
mov edx, eax
sub esp, 8
mov eax, str._invalid_
test edx, edx
jne 0x703c971a
mov edx, 0xffffffff
mov eax, ebx
call sym._wine_dbgstr_wn.part.0
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.Deleting__s_n
mov dword [esp + 8], str.do_process_key
mov dword [esp + 4], 0x703cd038
mov dword [esp], 3
call sym._wine_dbg_log.constprop.0_2
mov ebx, dword [esi]
jmp 0x703c941d
mov dword [ebp - 0x3c], 0
jmp 0x703c90a9
movzx ebx, bx
mov dword [esp], str._04x
mov dword [esp + 4], ebx
call sym._wine_dbg_sprintf_2
jmp 0x703c971a
movzx edi, di
mov dword [esp], str._04x
mov dword [esp + 4], edi
call sym._wine_dbg_sprintf_2
jmp 0x703c9681
mov edx, esi
lea eax, [ebp - 0x30]
call sym._get_word
mov edi, eax
test eax, eax
js 0x703c91e0
mov edx, dword [esi]
cmp word [edx], 0
je 0x703c9c21
mov eax, edx
lea esi, [esi]
add eax, 2
cmp word [eax], 0
jne 0x703c97b8
sub eax, edx
add eax, 2
mov edi, dword [ebp - 0x1c]
xor ecx, ecx
test edi, edi
je 0x703c97d2
mov ecx, dword [ebp - 0x24]
mov dword [esp + 0x14], eax
mov eax, dword [ebp - 0x2c]
mov dword [esp + 0x10], edx
mov dword [esp + 0xc], 1
mov dword [esp + 8], 0
mov dword [esp + 4], ecx
mov dword [esp], eax
call dword [sym.imp.advapi32.dll_RegSetValueExW]
sub esp, 0x18
mov edi, eax
test eax, eax
je 0x703c9633
test byte [0x703cd038], 4
jne 0x703c9bd0
test edi, edi
jle 0x703c962b
movzx eax, di
or eax, 0x80070000
cmp dword [ebp - 0x3c], 2
mov edi, eax
setne bl
jmp 0x703c91e7
mov edx, esi
lea eax, [ebp - 0x30]
call sym._get_word
mov edi, eax
test eax, eax
js 0x703c91e0
mov dword [esp + 8], 0xa
mov dword [esp + 4], 0
mov eax, dword [esi]
mov dword [esp], eax
call dword [sym.imp.ucrtbase.dll_wcstol]
mov ebx, dword [ebp - 0x1c]
mov dword [ebp - 0x28], eax
xor eax, eax
test ebx, ebx
je 0x703c9876
mov eax, dword [ebp - 0x24]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x2c]
lea edx, [ebp - 0x28]
mov dword [esp + 0x14], 4
mov dword [esp + 0x10], edx
mov dword [esp + 0xc], 4
mov dword [esp + 8], 0
mov dword [esp], eax
call dword [sym.imp.advapi32.dll_RegSetValueExW]
sub esp, 0x18
mov ebx, eax
test eax, eax
je 0x703c962b
test byte [0x703cd038], 4
jne 0x703c9ba3
movzx edi, bx
or edi, 0x80070000
test ebx, ebx
cmovle edi, ebx
jmp 0x703c962b
mov edx, esi
lea eax, [ebp - 0x30]
call sym._get_word
mov edi, eax
test eax, eax
js 0x703c91e0
mov eax, dword [esi]
movzx ebx, word [eax]
mov dword [ebp - 0x54], eax
test bx, bx
je 0x703c9bfd
lea esi, [esi]
add eax, 2
cmp word [eax], 0
jne 0x703c9900
sub eax, dword [ebp - 0x54]
sar eax, 1
inc eax
mov edx, eax
shr edx, 0x1f
add eax, edx
sar eax, 1
mov dword [ebp - 0x50], eax
mov dword [ebp - 0x58], eax
mov dword [esp], eax
mov eax, dword [ebp - 0x48]
call eax
mov dword [ebp - 0x4c], eax
test eax, eax
je 0x703c9c10
mov ecx, dword [ebp - 0x50]
test ecx, ecx
je 0x703c9a78
mov dword [ebp - 0x5c], edi
xor edx, edx
mov edi, dword [ebp - 0x54]
mov dword [ebp - 0x54], esi
jmp 0x703c99b8
lea ecx, [ebx - 0x61]
cmp cx, 5
jbe 0x703c99e8
sub ebx, 0x41
cmp bx, 5
ja 0x703c9b7e
sub eax, 0x37
movzx ebx, word [edi + edx*4 + 2]
lea esi, [ebx - 0x30]
mov ecx, ebx
cmp si, 9
jbe 0x703c99e0
lea esi, [ecx - 0x61]
cmp si, 5
jbe 0x703c99f0
sub ecx, 0x41
cmp cx, 5
ja 0x703c9b7e
sub ebx, 0x37
shl eax, 4
or ebx, eax
mov eax, dword [ebp - 0x4c]
mov byte [eax + edx], bl
inc edx
cmp dword [ebp - 0x50], edx
je 0x703c9a72
movzx ebx, word [edi + edx*4]
test bx, bx
je 0x703c9a72
lea ecx, [ebx - 0x30]
movzx eax, bx
cmp cx, 9
ja 0x703c9950
sub eax, 0x30
jmp 0x703c996d
mov eax, str._null_
jmp 0x703c9681
sub ebx, 0x30
jmp 0x703c9996
sub eax, 0x57
jmp 0x703c996d
sub ebx, 0x57
jmp 0x703c9996
mov eax, str._null_
jmp 0x703c971a
movzx edi, di
mov dword [esp], str._04x
mov dword [esp + 4], edi
call sym._wine_dbg_sprintf_2
jmp 0x703c95de
mov dword [esp + 0xc], str.value_not_set__n
mov dword [esp + 8], str.do_process_key
mov dword [esp + 4], 0x703cd038
mov dword [esp], 2
call sym._wine_dbg_log.constprop.0_2
jmp 0x703c955d
test byte [0x703cd038], 4
jne 0x703c9b51
movzx eax, di
mov edx, edi
mov ebx, 1
or eax, 0x80070000
test edi, edi
cmovg edx, eax
mov edi, edx
jmp 0x703c91e7
mov eax, str._null_
jmp 0x703c95de
mov edi, dword [ebp - 0x5c]
mov esi, dword [ebp - 0x54]
mov edx, dword [ebp - 0x1c]
xor eax, eax
test edx, edx
je 0x703c9a84
mov eax, dword [ebp - 0x24]
mov ecx, dword [ebp - 0x58]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x2c]
mov dword [esp + 0xc], 3
mov dword [esp + 0x14], ecx
mov ecx, dword [ebp - 0x4c]
mov dword [esp + 8], 0
mov dword [esp + 0x10], ecx
mov dword [esp], eax
call dword [sym.imp.advapi32.dll_RegSetValueExW]
sub esp, 0x18
mov ebx, eax
test eax, eax
je 0x703c9ad6
test byte [0x703cd038], 4
jne 0x703c9c2b
movzx edi, bx
or edi, 0x80070000
test ebx, ebx
cmovle edi, ebx
mov eax, dword [ebp - 0x4c]
mov dword [esp], eax
call dword [sym.imp.ucrtbase.dll_free]
jmp 0x703c962b
cmp dword [ebp - 0x3c], 2
mov edi, 0x80020009
setne bl
test byte [0x703cd038], 4
je 0x703c91e7
mov esi, dword [esi]
test esi, esi
je 0x703c9c70
mov eax, esi
shr eax, 0x10
je 0x703c9c58
mov dword [esp + 4], 0xffffffff
mov dword [esp], esi
call dword [sym.imp.kernel32.dll_IsBadStringPtrW]
mov edx, eax
sub esp, 8
mov eax, str._invalid_
test edx, edx
jne 0x703c9b40
mov edx, 0xffffffff
mov eax, esi
call sym._wine_dbgstr_wn.part.0
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.Wrong_registry_type:__s_n
jmp 0x703c950d
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.Could_not_create_open__key:__08lx_n
mov dword [esp + 8], str.do_process_key
mov dword [esp + 4], 0x703cd038
mov dword [esp], 2
call sym._wine_dbg_log.constprop.0_2
jmp 0x703c9a4d
mov esi, dword [ebp - 0x54]
mov edi, 0x80004005
jmp 0x703c9ad6
movzx esi, cx
mov dword [esp], str._04x
mov dword [esp + 4], esi
call sym._wine_dbg_sprintf_2
jmp 0x703c9501
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.Could_set_value_of_key:__08lx_n
mov dword [esp + 8], str.do_process_key
mov dword [esp + 4], 0x703cd038
mov dword [esp], 2
call sym._wine_dbg_log.constprop.0_2
jmp 0x703c98bf
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.Could_set_value_of_key:__08lx_n
mov dword [esp + 8], str.do_process_key
mov dword [esp + 4], 0x703cd038
mov dword [esp], 2
call sym._wine_dbg_log.constprop.0_2
jmp 0x703c9814
mov dword [esp], 0
mov eax, dword [ebp - 0x48]
call eax
mov dword [ebp - 0x4c], eax
test eax, eax
jne 0x703c9c7a
cmp dword [ebp - 0x3c], 2
mov edi, 0x8007000e
setne bl
jmp 0x703c91e7
mov eax, 2
jmp 0x703c97c6
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.Could_not_set_value_of_key:_0x_08lx_n
mov dword [esp + 8], str.do_process_key
mov dword [esp + 4], 0x703cd038
mov dword [esp], 2
call sym._wine_dbg_log.constprop.0_2
jmp 0x703c9ac8
movzx esi, si
mov dword [esp], str._04x
mov dword [esp + 4], esi
call sym._wine_dbg_sprintf_2
jmp 0x703c9b40
mov eax, str._null_
jmp 0x703c9b40
mov dword [ebp - 0x58], 0
jmp 0x703c9a78