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

Disassembly:
push 0xffffffffffffffff
push 0x46c2a8
mov eax, dword fs:[0]
push eax
sub esp, 0x80
push ebx
push ebp
push esi
push edi
mov eax, dword [0x491d88]
xor eax, esp
push eax
lea eax, [esp + 0x94]
mov dword fs:[0], eax
mov esi, ecx
cmp dword [esi + 0xf8], 4
jne 0x4139af
xor eax, eax
jmp 0x413e86
xor ebx, ebx
cmp dword [esp + 0xa4], ebx
je 0x413e80
lea edi, [esi + 0x1a8]
mov ebp, 0x10
cmp dword [edi + 0x18], ebp
jb 0x4139d3
mov eax, dword [edi + 4]
jmp 0x4139d6
lea eax, [edi + 4]
push eax
push str.CProgramIssue::IsPresent__s__n
push 2
push 0x4932a8
call fcn.00401300
add esp, 0x10
cmp dword [esi + 0x1bc], ebx
mov dword [esi + 0xe8], ebx
mov dword [esp + 0x18], ebx
mov dword [esp + 0x28], ebx
mov dword [esp + 0x24], ebx
jne 0x413a09
xor eax, eax
jmp 0x413a1c
lea eax, [esp + 0x38]
push eax
mov ecx, edi
call fcn.00405c00
mov ecx, eax
call fcn.00405790
lea ecx, [esp + 0x24]
push ecx
mov ecx, dword [esi + 0xec]
lea edx, [esp + 0x2c]
push edx
push eax
call fcn.00405500
test eax, eax
jne 0x413e3d
mov ecx, dword [esp + 0x24]
mov edx, dword [esp + 0x28]
push ebx
lea eax, [esp + 0x1c]
push eax
push 0x20019
push ebx
push ecx
push edx
call fcn.0042afd2
add esp, 0x18
cmp dword [edi + 0x18], ebp
mov ebx, eax
jb 0x413a64
mov ebp, dword [edi + 4]
jmp 0x413a67
lea ebp, [edi + 4]
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push ebp
push str.RegOpenKey__s__returns_error__d_n
push 0x20
push 0x4932a8
call fcn.00401300
mov eax, dword [esi + 0x100]
add esp, 0x14
cmp eax, 2
jne 0x413df1
xor eax, eax
cmp ebx, eax
jne 0x413e2a
mov ebp, dword [sym.imp.ADVAPI32.dll_RegQueryValueExA]
lea ecx, [esp + 0x2c]
push ecx
lea edx, [esp + 0x34]
push edx
mov edx, dword [esp + 0x20]
lea ecx, [esp + 0x24]
push ecx
push eax
push str.Version
push edx
mov dword [esp + 0x34], 4
mov dword [esp + 0x48], eax
mov dword [esp + 0x4c], eax
mov dword [esp + 0x44], 8
call ebp
mov edi, dword [esp + 0x30]
mov eax, edi
and eax, 0xff000000
mov ecx, 0x100
mul ecx
mov ecx, edi
xor ebx, ebx
and ecx, 0xff0000
push ebx
add eax, ecx
push 0x100
adc edx, ebx
push edx
push eax
call fcn.00455650
mov ecx, edi
and ecx, 0xff00
push ebx
add eax, ecx
push 0x100
adc edx, ebx
push edx
push eax
call fcn.00455650
xor ecx, ecx
and edi, 0xff
add eax, edi
adc edx, ecx
mov dword [esi + 0xd0], eax
mov ecx, eax
mov eax, edx
cmp eax, dword [esi + 0xdc]
mov dword [esi + 0xd4], edx
jl 0x413e2a
jg 0x413b52
cmp ecx, dword [esi + 0xd8]
jb 0x413e2a
cmp eax, dword [esi + 0xe4]
jg 0x413e2a
jl 0x413b6c
cmp ecx, dword [esi + 0xe0]
ja 0x413e2a
cmp dword [esi + 0x1c0], 0x10
jb 0x413b7d
mov eax, dword [esi + 0x1ac]
jmp 0x413b83
lea eax, [esi + 0x1ac]
push eax
push str._s_is_installed_and_it_needs_to_be_uninstalled_n
push 0x400
push 0x4932a8
call fcn.00401300
mov ecx, dword [esp + 0x28]
add esp, 0x10
lea edx, [esp + 0x14]
push edx
push ebx
lea eax, [esp + 0x24]
push eax
push ebx
push str.UninstallString
push ecx
mov dword [esi + 0xe8], 1
mov dword [esp + 0x2c], ebx
call ebp
xor edi, edi
cmp dword [esp + 0x14], ebx
je 0x413d5d
mov ecx, dword [esp + 0x18]
lea edx, [esp + 0x20]
push edx
push ebx
lea eax, [esp + 0x24]
push eax
push ebx
push str.QuietUninstallString
push ecx
mov dword [esp + 0x38], ebx
call ebp
mov ecx, dword [esp + 0x20]
cmp ecx, ebx
je 0x413c29
push ecx
call fcn.0042f9cf
mov ecx, dword [esp + 0x1c]
add esp, 4
lea edx, [esp + 0x14]
push edx
mov edi, eax
push edi
lea eax, [esp + 0x24]
push eax
push ebx
push str.QuietUninstallString
push ecx
call ebp
cmp eax, ebx
jne 0x413c40
push edi
lea ecx, [esi + 0x1e0]
call fcn.00404200
jmp 0x413d5d
cmp eax, ebx
je 0x413d5d
mov edx, dword [esp + 0x14]
push edx
call fcn.0042f9cf
add esp, 4
jmp 0x413c70
cmp edi, ebx
jne 0x413c53
mov edx, dword [esp + 0x14]
push edx
call fcn.0042f9cf
add esp, 4
jmp 0x413c70
mov eax, dword [esp + 0x20]
cmp eax, dword [esp + 0x14]
jae 0x413c72
push edi
call fcn.0042f9ca
mov ecx, dword [esp + 0x18]
push ecx
call fcn.0042f9cf
add esp, 8
mov edi, eax
mov ecx, dword [esp + 0x18]
lea edx, [esp + 0x14]
push edx
push edi
lea eax, [esp + 0x24]
push eax
push ebx
push str.UninstallString
push ecx
call ebp
cmp eax, ebx
jne 0x413d5d
lea ebx, [esi + 0x1e0]
push edi
mov ecx, ebx
call fcn.00404200
push str.msiexec
push 7
push 0
mov ecx, ebx
call fcn.0040e1e0
test eax, eax
jne 0x413d5d
push 0xffffffffffffffff
push 0x472e4c
lea ecx, [esi + 0x1a8]
call fcn.00405ac0
mov edx, eax
add eax, 1
test edx, edx
je 0x413d5d
push 0xffffffffffffffff
push eax
lea eax, [esp + 0x80]
push eax
lea ecx, [esi + 0x1a8]
call fcn.00406ae0
push eax
lea ecx, [esp + 0x60]
push str.msiexec__x
push ecx
mov dword [esp + 0xa8], 0
call fcn.00406b20
push str.__qn
push eax
lea edx, [esp + 0x54]
push edx
mov byte [esp + 0xb4], 1
call fcn.00406be0
add esp, 0x18
push 0xffffffffffffffff
push 0
push eax
mov ecx, ebx
mov byte [esp + 0xa8], 2
call fcn.00403cf0
lea ecx, [esp + 0x40]
call fcn.00402f20
lea ecx, [esp + 0x5c]
call fcn.00402f20
lea ecx, [esp + 0x78]
mov dword [esp + 0x9c], 0xffffffff
call fcn.00402f20
cmp dword [esi + 0x1f4], 0
je 0x413de2
mov edx, dword [esp + 0x18]
lea eax, [esp + 0x14]
push eax
push 0
lea ecx, [esp + 0x24]
push ecx
push 0
push str.DisplayVersion
push edx
mov dword [esi + 0xe8], 1
call ebp
mov eax, dword [esp + 0x14]
test eax, eax
je 0x413de2
cmp eax, 4
jbe 0x413dac
push edi
call fcn.0042f9ca
mov eax, dword [esp + 0x18]
push eax
call fcn.0042f9cf
add esp, 8
mov edi, eax
mov eax, dword [esp + 0x18]
lea ecx, [esp + 0x14]
push ecx
push edi
lea edx, [esp + 0x24]
push edx
push 0
push str.DisplayVersion
push eax
call ebp
test eax, eax
jne 0x413de2
push edi
lea ecx, [esi + 0x1fc]
call fcn.00404200
push 0x473048
lea ecx, [esi + 0x5c]
call fcn.00404200
test edi, edi
je 0x413e2a
push edi
call fcn.0042f9ca
add esp, 4
jmp 0x413e2a
cmp eax, 3
jne 0x413e2a
test ebx, ebx
je 0x413e2a
mov dword [esi + 0xe8], 1
cmp dword [edi + 0x18], 0x10
jb 0x413e0f
mov edi, dword [edi + 4]
jmp 0x413e12
add edi, 4
push edi
push str._s_should_be_installed_and_it_isnt._n
push 0x400
push 0x4932a8
call fcn.00401300
add esp, 0x10
mov eax, dword [esp + 0x18]
test eax, eax
je 0x413e6c
push eax
call fcn.0042b427
add esp, 4
jmp 0x413e6c
cmp dword [edi + 0x18], ebp
jb 0x413e47
mov edi, dword [edi + 4]
jmp 0x413e4a
add edi, 4
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push edi
push str.HrIdentifyRegistryRootKey__s__fails_with__d_n
push 0x40
push 0x4932a8
call fcn.00401300
add esp, 0x14
mov dword [esi + 0xe8], ebx
push str.CProgramIssue::IsPresent___n
push 4
push 0x4932a8
call fcn.00401300
add esp, 0xc
mov eax, dword [esi + 0xe8]
mov ecx, dword [esp + 0x94]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x8c
ret 4