Function at 0x4043ca
Capabilities:
Get common file path
Get program files directory

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x3c
mov eax, dword [0x421030]
xor eax, ebp
mov dword [ebp - 4], eax
push ebx
push esi
push edi
mov esi, edx
mov edi, ecx
call fcn.00402d76
xor ebx, ebx
mov byte [esi + 0x224], 0
mov dword [esi + 0x228], edi
mov dword [esi + 0x22c], str.YourFileDownloader
mov dword [esi + 0x1aa0], ebx
mov dword [esi + 0x1aa4], ebx
mov dword [esi + 0x1cb0], ebx
cmp edi, ebx
je 0x404660
mov edi, 0x103
push edi
lea eax, [esi + 0x232]
push eax
push ebx
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameW]
test eax, eax
je 0x404660
push 1
push 0x1a
lea eax, [esi + 0x642]
push eax
push ebx
mov ebx, dword [sym.imp.SHELL32.dll_SHGetSpecialFolderPathW]
call ebx
test eax, eax
je 0x404660
push 1
push 0x16
lea eax, [esi + 0x84a]
push eax
push 0
call ebx
test eax, eax
je 0x404660
push 1
push 0x19
lea eax, [esi + 0xc5a]
push eax
push 0
call ebx
test eax, eax
je 0x404660
lea eax, [esi + 0x642]
lea edx, [eax + 2]
mov cx, word [eax]
add eax, 2
test cx, cx
jne 0x404488
sub eax, edx
sar eax, 1
push str.YourFileDownloader
mov ebx, 0x41e7c0
mov ecx, edi
sub ecx, eax
push ebx
push ecx
lea eax, [esi + eax*2 + 0x642]
push eax
call fcn.0040846d
lea eax, [esi + 0x84a]
add esp, 0x10
lea ecx, [eax + 2]
mov dx, word [eax]
add eax, 2
test dx, dx
jne 0x4044c0
sub eax, ecx
sar eax, 1
push str.YourFileDownloader
mov ecx, edi
sub ecx, eax
push ebx
push ecx
lea eax, [esi + eax*2 + 0x84a]
push eax
call fcn.0040846d
lea eax, [esi + 0x43a]
push eax
push str.install_dir
call fcn.00403f3b
add esp, 0x18
test al, al
jne 0x40454d
push 1
push 0x26
lea eax, [esi + 0x43a]
push eax
push 0
call dword [sym.imp.SHELL32.dll_SHGetSpecialFolderPathW]
test eax, eax
je 0x404660
lea eax, [esi + 0x43a]
lea edx, [eax + 2]
mov cx, word [eax]
add eax, 2
test cx, cx
jne 0x404523
sub eax, edx
sar eax, 1
push str.YourFileDownloader
mov ecx, edi
sub ecx, eax
push ebx
push ecx
lea eax, [esi + eax*2 + 0x43a]
push eax
call fcn.0040846d
add esp, 0x10
push str.uninstall.exe
lea eax, [esi + 0x43a]
push eax
push 0x41d8c8
lea eax, [esi + 0xa52]
push edi
push eax
call fcn.0040846d
add esp, 0x14
lea eax, [esi + 0x232]
push eax
call dword [sym.imp.SHLWAPI.dll_PathFindFileNameW]
mov dword [ebp - 0x2c], eax
test eax, eax
je 0x404660
push 0x41d6d0
mov ebx, 0x41e7c8
push ebx
lea eax, [esi + 0x188a]
push edi
push eax
call fcn.0040846d
push str.1.0.3
push ebx
lea eax, [esi + 0x1682]
push edi
push eax
call fcn.0040846d
lea eax, [ebp - 0x38]
push eax
call fcn.00408f0c
add esp, 0x24
lea eax, [ebp - 0x38]
push eax
lea eax, [ebp - 0x28]
push eax
call fcn.00408b78
lea eax, [ebp - 0x28]
push eax
call fcn.00408b66
add esp, 0xc
mov dword [esi + 0x1a98], eax
lea eax, [esi + 0x1aa0]
push eax
push str.last_update_date
mov dword [esi + 0x1a9c], edx
call fcn.00403f74
mov eax, dword [ebp - 0x2c]
pop ecx
pop ecx
mov ecx, str.uninstall.exe
mov dx, word [eax]
cmp dx, word [ecx]
jne 0x404623
test dx, dx
je 0x40461f
mov dx, word [eax + 2]
cmp dx, word [ecx + 2]
jne 0x404623
add eax, 4
add ecx, 4
test dx, dx
jne 0x4045fd
xor eax, eax
jmp 0x404628
sbb eax, eax
sbb eax, 0xffffffff
mov edx, dword [ebp - 0x2c]
test eax, eax
sete al
mov ecx, esi
mov byte [esi + 0x230], al
call fcn.0040423d
push esi
call fcn.00404177
push 0x208
lea eax, [esi + 0x1aa8]
push 0
push eax
call fcn.0040c2f0
add esp, 0xc
mov byte [esi + 0x224], 1
mov ecx, dword [ebp - 4]
pop edi
mov eax, esi
pop esi
xor ecx, ebp
pop ebx
call fcn.0040845e
leave
ret