Function at 0x45ee30
Capabilities:
Check if file exists
Query or enumerate registry value

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x59bfb0
mov eax, dword fs:[0]
push eax
sub esp, 0x2c
push ebx
push esi
push edi
mov eax, dword [0x60f520]
xor eax, ebp
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov eax, dword [ebp + 0xc]
mov dword [ebp - 0x2c], 0
push dword [eax]
call dword [sym.imp.SHLWAPI.dll_PathFindExtensionW]
mov ebx, eax
mov dword [ebp - 0x14], 0
mov dword [ebp - 0x10], 0
call fcn.0040bce0
xor ecx, ecx
mov edx, eax
test edx, edx
setne cl
test ecx, ecx
jne 0x45ee96
push 0x80004005
call fcn.0040c390
mov eax, dword [edx]
mov ecx, edx
call dword [eax + 0xc]
lea esi, [eax + 0x10]
mov dword [ebp - 0x20], esi
lea eax, [ebp - 0x10]
mov dword [ebp - 4], 0
mov edi, dword [sym.imp.SHLWAPI.dll_SHGetValueW]
push eax
push 0
lea eax, [ebp - 0x14]
push eax
push 0
push ebx
push SysReAllocString
call edi
cmp dword [ebp - 0x14], 1
je 0x45ef10
mov edi, dword [ebp + 8]
mov ecx, edi
push 0x5bc584
call fcn.0040c2d0
add esi, 0xfffffff0
mov dword [ebp - 4], 0xffffffff
or ecx, 0xffffffff
lea eax, [esi + 0xc]
lock xadd dword [eax], ecx
dec ecx
test ecx, ecx
jg 0x45eefa
mov ecx, dword [esi]
push esi
mov edx, dword [ecx]
call dword [edx + 4]
mov eax, edi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 8
mov edx, dword [ebp - 0x10]
shr edx, 1
add edx, 8
jns 0x45ef24
push 0x80070057
call fcn.0040c390
mov eax, dword [esi - 8]
mov ecx, 1
sub ecx, dword [esi - 4]
sub eax, edx
or eax, ecx
jge 0x45ef41
push edx
lea ecx, [ebp - 0x20]
call fcn.0040c110
mov esi, dword [ebp - 0x20]
lea eax, [ebp - 0x10]
push eax
push esi
push 0
push 0
push ebx
push SysReAllocString
call edi
push dword [esi - 8]
push esi
call fcn.00551cd2
add esp, 8
test eax, eax
js 0x45ef1a
cmp eax, dword [esi - 8]
jg 0x45ef1a
xor ecx, ecx
mov dword [esi - 0xc], eax
mov word [esi + eax*2], cx
mov dword [ebp - 0x14], ecx
call fcn.0040bce0
xor ecx, ecx
mov edx, eax
test edx, edx
setne cl
test ecx, ecx
jne 0x45ef8f
push 0x80004005
call fcn.0040c390
mov eax, dword [edx]
mov ecx, edx
call dword [eax + 0xc]
add eax, 0x10
mov dword [ebp - 0x18], eax
push esi
lea eax, [ebp - 0x18]
mov byte [ebp - 4], 1
push str._s_shellopencommand
push eax
call fcn.00422de0
mov ebx, dword [ebp - 0x18]
lea eax, [ebp - 0x10]
add esp, 0xc
push eax
push 0
lea eax, [ebp - 0x14]
push eax
push 0
push ebx
push SysReAllocString
call edi
mov eax, dword [ebp - 0x14]
cmp eax, 2
je 0x45f20f
cmp eax, 1
je 0x45f20f
call fcn.0040bce0
xor ecx, ecx
mov edx, eax
test edx, edx
setne cl
test ecx, ecx
jne 0x45effa
push 0x80004005
call fcn.0040c390
mov eax, dword [edx]
mov ecx, edx
call dword [eax + 0xc]
add eax, 0x10
mov dword [ebp - 0x1c], eax
push esi
lea eax, [ebp - 0x1c]
mov byte [ebp - 4], 5
push str._s_shellopencommand
push eax
call fcn.00422de0
mov edi, dword [ebp - 0x1c]
lea eax, [ebp - 0x10]
add esp, 0xc
mov dword [ebp - 0x14], 0
push eax
push 0
lea eax, [ebp - 0x14]
push eax
push 0
push edi
push SysReAllocString
call dword [sym.imp.SHLWAPI.dll_SHGetValueW]
mov eax, dword [ebp - 0x14]
cmp eax, 2
je 0x45f088
cmp eax, 1
je 0x45f088
mov ecx, dword [ebp + 8]
push 0x5bc584
call fcn.0040c2d0
lea ecx, [ebp - 0x1c]
call fcn.0040c450
lea ecx, [ebp - 0x18]
call fcn.0040c450
lea ecx, [ebp - 0x20]
call fcn.0040c450
mov eax, dword [ebp + 8]
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 8
call fcn.0040bce0
xor ecx, ecx
mov edx, eax
test edx, edx
setne cl
test ecx, ecx
jne 0x45f0a4
push 0x80004005
call fcn.0040c390
mov eax, dword [edx]
mov ecx, edx
call dword [eax + 0xc]
add eax, 0x10
mov dword [ebp + 0xc], eax
lea eax, [ebp - 0x10]
mov byte [ebp - 4], 6
push eax
mov eax, dword [ebp - 0x10]
lea ecx, [ebp + 0xc]
shr eax, 1
add eax, 8
push eax
call fcn.0040c180
push eax
push 0
push 0
push edi
push SysReAllocString
call dword [sym.imp.SHLWAPI.dll_SHGetValueW]
mov eax, dword [ebp + 0xc]
push dword [eax - 8]
push eax
call fcn.00551cd2
mov edx, eax
add esp, 8
test edx, edx
js 0x45ef1a
mov ecx, dword [ebp + 0xc]
cmp edx, dword [ecx - 8]
jg 0x45ef1a
mov dword [ecx - 0xc], edx
xor ecx, ecx
mov eax, dword [ebp + 0xc]
push 0x5bd554
push 0x5bd554
mov word [eax + edx*2], cx
lea ecx, [ebp + 0xc]
call fcn.004474b0
mov ecx, eax
call fcn.00448ac0
mov eax, dword [ebp + 0xc]
cmp dword [eax - 0xc], 0
jl 0x45f17a
push str..exe
push eax
call fcn.00552a08
mov ecx, eax
add esp, 8
mov eax, dword [ebp + 0xc]
test ecx, ecx
je 0x45f17a
sub ecx, eax
sar ecx, 1
cmp ecx, 0xffffffff
je 0x45f17a
lea eax, [ecx + 4]
push eax
lea eax, [ebp - 0x24]
push eax
lea ecx, [ebp + 0xc]
call fcn.004120e0
push eax
lea ecx, [ebp + 0xc]
mov byte [ebp - 4], 7
call fcn.0040b7d0
lea ecx, [ebp - 0x24]
mov byte [ebp - 4], 6
call fcn.0040c450
mov eax, dword [ebp + 0xc]
lea ecx, [eax - 0x10]
call fcn.0040c3c0
mov ecx, dword [ebp + 8]
add eax, 0x10
mov byte [ebp - 4], 5
or edx, 0xffffffff
mov dword [ecx], eax
mov eax, dword [ebp + 0xc]
add eax, 0xfffffff0
mov dword [ebp - 0x28], eax
lea ecx, [eax + 0xc]
mov eax, edx
lock xadd dword [ecx], eax
dec eax
test eax, eax
jg 0x45f1b6
mov edx, dword [ebp - 0x28]
push edx
mov ecx, dword [edx]
mov eax, dword [ecx]
call dword [eax + 4]
or edx, 0xffffffff
add edi, 0xfffffff0
mov byte [ebp - 4], 1
mov ecx, edx
lea eax, [edi + 0xc]
lock xadd dword [eax], ecx
dec ecx
test ecx, ecx
jg 0x45f1d6
mov ecx, dword [edi]
push edi
mov eax, dword [ecx]
call dword [eax + 4]
or edx, 0xffffffff
add ebx, 0xfffffff0
mov byte [ebp - 4], 0
mov ecx, edx
lea eax, [ebx + 0xc]
lock xadd dword [eax], ecx
dec ecx
test ecx, ecx
jg 0x45f1f6
mov ecx, dword [ebx]
push ebx
mov eax, dword [ecx]
call dword [eax + 4]
or edx, 0xffffffff
add esi, 0xfffffff0
mov dword [ebp - 4], 0xffffffff
lea eax, [esi + 0xc]
lock xadd dword [eax], edx
dec edx
test edx, edx
jmp 0x45f351
call fcn.0040bce0
xor ecx, ecx
mov edx, eax
test edx, edx
setne cl
test ecx, ecx
jne 0x45f22b
push 0x80004005
call fcn.0040c390
mov eax, dword [edx]
mov ecx, edx
call dword [eax + 0xc]
lea edi, [eax + 0x10]
mov dword [ebp - 0x1c], edi
mov byte [ebp - 4], 2
mov ecx, dword [ebp - 0x10]
shr ecx, 1
add ecx, 8
jns 0x45f250
push 0x80070057
call fcn.0040c390
mov eax, dword [edi - 8]
mov edx, 1
sub edx, dword [edi - 4]
sub eax, ecx
or eax, edx
jge 0x45f26d
push ecx
lea ecx, [ebp - 0x1c]
call fcn.0040c110
mov edi, dword [ebp - 0x1c]
lea eax, [ebp - 0x10]
push eax
push edi
push 0
push 0
push ebx
push SysReAllocString
call dword [sym.imp.SHLWAPI.dll_SHGetValueW]
push dword [edi - 8]
push edi
call fcn.00551cd2
add esp, 8
test eax, eax
js 0x45ef1a
cmp eax, dword [edi - 8]
jg 0x45ef1a
xor ecx, ecx
mov dword [edi - 0xc], eax
mov word [edi + eax*2], cx
mov dword [ebp - 0x38], ecx
mov dword [ebp - 0x34], ecx
mov dword [ebp - 0x30], ecx
lea eax, [ebp - 0x38]
mov byte [ebp - 4], 3
push eax
lea ecx, [ebp - 0x1c]
call fcn.0045ed00
mov eax, dword [ebp - 0x34]
add esp, 4
mov ecx, dword [ebp - 0x38]
sub eax, ecx
test eax, 0xfffffffc
jne 0x45f372
mov ecx, dword [ebp + 8]
push 0x5bc584
call fcn.0040c2d0
mov eax, dword [ebp - 0x38]
test eax, eax
je 0x45f300
mov ecx, dword [ebp - 0x34]
push ecx
push eax
call fcn.0040b740
push dword [ebp - 0x38]
call fcn.00551995
add esp, 4
lea edx, [edi - 0x10]
mov byte [ebp - 4], 1
or edi, 0xffffffff
lea ecx, [edx + 0xc]
mov eax, edi
lock xadd dword [ecx], eax
dec eax
test eax, eax
jg 0x45f320
mov ecx, dword [edx]
push edx
mov eax, dword [ecx]
call dword [eax + 4]
add ebx, 0xfffffff0
mov byte [ebp - 4], 0
mov ecx, edi
lea eax, [ebx + 0xc]
lock xadd dword [eax], ecx
dec ecx
test ecx, ecx
jg 0x45f33d
mov ecx, dword [ebx]
push ebx
mov eax, dword [ecx]
call dword [eax + 4]
add esi, 0xfffffff0
mov dword [ebp - 4], 0xffffffff
lea eax, [esi + 0xc]
lock xadd dword [eax], edi
dec edi
test edi, edi
jg 0x45f35b
mov ecx, dword [esi]
push esi
mov edx, dword [ecx]
call dword [edx + 4]
mov eax, dword [ebp + 8]
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 8
mov ecx, dword [ecx]
sub ecx, 0x10
call fcn.0040c3c0
add eax, 0x10
mov dword [ebp + 0xc], eax
push ecx
lea ecx, [ebp + 0xc]
mov byte [ebp - 4], 4
call fcn.0045f580
push ecx
lea ecx, [ebp + 0xc]
call fcn.0045f500
mov ebx, dword [ebp + 0xc]
cmp dword [ebx - 0xc], 0
je 0x45f3fa
push ebx
call dword [sym.imp.SHLWAPI.dll_PathFileExistsW]
test eax, eax
je 0x45f3fa
lea ecx, [ebx - 0x10]
call fcn.0040c3c0
mov esi, dword [ebp + 8]
lea ecx, [ebp + 0xc]
add eax, 0x10
mov dword [esi], eax
call fcn.0040c450
lea ecx, [ebp - 0x38]
call fcn.0040b790
lea ecx, [ebp - 0x1c]
call fcn.0040c450
lea ecx, [ebp - 0x18]
call fcn.0040c450
lea ecx, [ebp - 0x20]
call fcn.0040c450
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 8
mov ecx, dword [ebp + 8]
push 0x5bc584
call fcn.0040c2d0
lea edx, [ebx - 0x10]
mov byte [ebp - 4], 3
or ebx, 0xffffffff
lea ecx, [edx + 0xc]
mov eax, ebx
lock xadd dword [ecx], eax
dec eax
test eax, eax
jg 0x45f427
mov ecx, dword [edx]
push edx
mov eax, dword [ecx]
call dword [eax + 4]
mov ecx, dword [ebp - 0x34]
push ecx
push dword [ebp - 0x38]
call fcn.0040b740
push dword [ebp - 0x38]
call fcn.00551995
add edi, 0xfffffff0
mov byte [ebp - 4], 1
add esp, 4
mov ecx, ebx
lea eax, [edi + 0xc]
lock xadd dword [eax], ecx
dec ecx
test ecx, ecx
jg 0x45f45b
mov ecx, dword [edi]
push edi
mov eax, dword [ecx]
call dword [eax + 4]
mov byte [ebp - 4], 0
mov ecx, ebx
mov edx, dword [ebp - 0x18]
add edx, 0xfffffff0
lea eax, [edx + 0xc]
lock xadd dword [eax], ecx
dec ecx
test ecx, ecx
jg 0x45f47b
mov ecx, dword [edx]
push edx
mov eax, dword [ecx]
call dword [eax + 4]
add esi, 0xfffffff0
mov dword [ebp - 4], 0xffffffff
lea eax, [esi + 0xc]
lock xadd dword [eax], ebx
dec ebx
test ebx, ebx
jmp 0x45f351