Function at 0x407590
Capabilities:
Check if file exists
Get file attributes

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
push 0xffffffffffffffff
push 0x44e2df
mov eax, dword fs:[0]
push eax
push ecx
mov eax, 0x3094
call fcn.0043a050
mov eax, dword [0x4677a0]
xor eax, esp
mov dword [esp + 0x3090], eax
push ebx
push esi
push edi
mov eax, dword [0x4677a0]
xor eax, esp
push eax
lea eax, [esp + 0x30a8]
mov dword fs:[0], eax
lea eax, [esp + 0x14]
mov esi, ecx
push eax
mov dword [esp + 0x14], esi
mov dword [esp + 0x18], 8
mov dword [esp + 0x1c], 0xff
call dword [sym.imp.COMCTL32.dll_InitCommonControlsEx]
mov ecx, esi
call fcn.00424540
push 0
call sub.IMM32.dll_ImmDisableIME
push 0
call fcn.00425688
add esp, 4
push 0
call dword [sym.imp.ole32.dll_CoInitialize]
test eax, eax
jl 0x407e1d
mov eax, dword [esi + 0x48]
test eax, eax
je 0x407721
push 0x458090
push eax
call fcn.0043588c
add esp, 8
test eax, eax
jbe 0x407721
mov ecx, 0x46f0f8
sub eax, ecx
mov edx, 0x28
lea edi, [eax + 0xc]
mov edi, edi
lea eax, [edx + 0x7fffffd6]
test eax, eax
je 0x407670
movzx eax, word [ecx + edi]
test ax, ax
je 0x407670
mov word [ecx], ax
add ecx, 2
sub edx, 1
jne 0x407650
jmp 0x407674
test edx, edx
jne 0x407677
sub ecx, 2
push 0x46bf84
xor edx, edx
push 0x46f0f8
mov word [ecx], dx
call dword [sym.imp.ole32.dll_IIDFromString]
test eax, eax
jl 0x407e1d
mov eax, dword [esi + 0x48]
push str._EMMODE1
push eax
call fcn.0043588c
add esp, 8
test eax, eax
je 0x4076b0
mov esi, 1
jmp 0x4076e6
mov eax, dword [esi + 0x48]
push str._EMMODE2
push eax
call fcn.0043588c
add esp, 8
test eax, eax
je 0x4076cc
mov esi, 2
jmp 0x4076e6
mov eax, dword [esi + 0x48]
push str._EMMODE3
push eax
call fcn.0043588c
add esp, 8
mov esi, eax
neg esi
sbb esi, esi
and esi, 3
push 0x46f0f8
call fcn.00407e60
add esp, 4
mov word [0x46bfe4], ax
test ax, ax
jne 0x407709
mov eax, 0x804
mov word [0x46bfe4], ax
test esi, esi
je 0x407717
call fcn.0040e660
jmp 0x407e1d
call fcn.0040e530
jmp 0x407e1d
mov edi, dword [esi + 0x48]
push 0x46bdb8
call fcn.0040c490
test al, al
je 0x407e17
mov ebx, 0x46bdb8
call fcn.0040c500
test al, al
je 0x407e17
push 0x10d0
push 0
push 0x46bdbc
call fcn.00437690
mov al, byte [0x46bdb8]
add esp, 0xc
cmp al, 0x75
jne 0x4079bb
cmp byte [0x46bdb9], 0
jne 0x40778b
mov edi, 0x46f148
call fcn.00409800
mov ecx, dword [esi + 0x48]
push ecx
push ebx
call fcn.0040e200
jmp 0x407e1d
mov eax, 0x46f96c
mov ecx, 0x46f0f8
call fcn.004073f0
xor edx, edx
mov word [0x46fb74], dx
push 0x104
push 0x46f0f8
mov edx, 0x46fb74
mov ecx, str.DataLocation
call fcn.00407360
push 0x28
push 0x46f0f8
mov esi, 0x46bee4
call fcn.004047a0
xor eax, eax
push 0x28
push 0x46f0f8
mov edx, 0x46be44
mov ecx, str.DisplayName
mov word [0x46be44], ax
call fcn.00407360
xor ecx, ecx
mov word [0x46c076], cx
push 0x28
push 0x46f0f8
mov edx, 0x46c076
mov ecx, str.DisplayVersion
call fcn.00407360
xor edx, edx
mov word [0x46c4c6], dx
push 0x104
push 0x46f0f8
mov edx, 0x46c4c6
mov ecx, 0x457ff8
call fcn.00407360
xor eax, eax
push 0x28
push 0x46f0f8
mov edx, 0x46be94
mov ecx, str.LanguageName
mov word [0x46be94], ax
call fcn.00407360
xor ecx, ecx
mov word [0x46c96e], cx
push 0x104
push 0x46f0f8
mov edx, 0x46c96e
mov ecx, str.UnstallCommand
call fcn.00407360
push 0x46f0f8
call fcn.00407e60
add esp, 0x3c
mov word [0x46bfe4], ax
test ax, ax
jne 0x407890
mov edx, 0x804
mov word [0x46bfe4], dx
cmp word [0x46f96c], 0
je 0x4079a2
cmp word [0x46fb74], 0
je 0x4079a2
cmp word [0x46bee4], 0
je 0x4079a2
cmp word [0x46be44], 0
je 0x4079a2
cmp word [0x46c076], 0
je 0x4079a2
cmp word [0x46be94], 0
je 0x4079a2
mov edi, 0x46bee4
mov esi, 0x46fb74
call fcn.0040a480
mov eax, esi
lea edx, [eax + 2]
jmp 0x407900
mov cx, word [eax]
add eax, 2
test cx, cx
jne 0x407900
sub eax, edx
sar eax, 1
cmp word [eax*2 + 0x46fb72], 0x5c
je 0x407957
mov ecx, 0x104
mov eax, 0x46fb74
cmp word [eax], 0
je 0x407934
add eax, 2
sub ecx, 1
jne 0x407924
jmp 0x407957
test ecx, ecx
je 0x407957
mov eax, 0x104
sub eax, ecx
mov ecx, 0x104
sub ecx, eax
lea edx, [eax*2 + 0x46fb74]
mov eax, 0x457ff4
call fcn.00407450
lea eax, [esp + 0x1c]
push eax
call fcn.00405550
mov edx, dword [esp + 0x10]
lea ecx, [esp + 0x1c]
mov dword [esp + 0x30b0], 0
mov dword [edx + 0x20], ecx
call fcn.00418c27
call fcn.0040e3b0
mov dword [esp + 0x30b0], 0xffffffff
lea ecx, [esp + 0x1c]
mov dword [esp + 0x1c], vtable.CCDD_Uninstall.0
call fcn.004184d5
jmp 0x407e0d
push 0x10
push 0x457c58
push 0x4580dc
push 0
call dword [sym.imp.USER32.dll_MessageBoxW]
jmp 0x407e1d
cmp al, 0x72
jne 0x407b53
cmp byte [0x46bdb9], 0
jne 0x4079e9
mov edi, 0x46f148
call fcn.00409800
mov eax, dword [esi + 0x48]
push eax
push 0x46bdb8
call fcn.0040e200
jmp 0x407e1d
mov eax, 0x46f96c
mov ecx, 0x46f0f8
call fcn.004073f0
test eax, eax
jne 0x407a14
push 0x10
push 0x457994
push 0x4580dc
push eax
call dword [sym.imp.USER32.dll_MessageBoxW]
jmp 0x407e1d
xor ecx, ecx
mov word [0x46f350], cx
push 0x46f96c
push 0x4577b8
mov ecx, 0x104
mov ebx, 0x46f558
call fcn.00402d10
add esp, 8
lea edx, [esp + 0x32c]
push edx
call fcn.00402e20
lea ecx, [esp + 0x32c]
mov dword [esp + 0x30b0], 1
call fcn.00418c27
cmp eax, 1
je 0x407a9c
mov edi, 0x46f148
call fcn.00409800
push 0x10
push 0x457994
push 0x4580dc
push 0
call dword [sym.imp.USER32.dll_MessageBoxW]
lea ecx, [esp + 0x32c]
mov dword [esp + 0x30b0], 0xffffffff
call fcn.00402ec0
jmp 0x407e1d
mov edi, 0x46bee4
mov esi, 0x46fb74
call fcn.0040a480
mov eax, esi
lea edx, [eax + 2]
mov cx, word [eax]
add eax, 2
test cx, cx
jne 0x407ab0
sub eax, edx
sar eax, 1
cmp word [eax*2 + 0x46fb72], 0x5c
je 0x407b07
mov ecx, 0x104
mov eax, 0x46fb74
cmp word [eax], 0
je 0x407ae4
add eax, 2
sub ecx, 1
jne 0x407ad4
jmp 0x407b07
test ecx, ecx
je 0x407b07
mov eax, 0x104
sub eax, ecx
mov ecx, 0x104
sub ecx, eax
lea edx, [eax*2 + 0x46fb74]
mov eax, 0x457ff4
call fcn.00407450
lea eax, [esp + 0x1c]
push eax
call fcn.00404cb0
mov edx, dword [esp + 0x10]
lea ecx, [esp + 0x1c]
mov byte [esp + 0x30b0], 2
mov dword [edx + 0x20], ecx
call fcn.00418c27
call fcn.0040e3b0
mov byte [esp + 0x30b0], 1
lea ecx, [esp + 0x1c]
mov dword [esp + 0x1c], vtable.CDD_Repair.0
call fcn.004184d5
lea ecx, [esp + 0x32c]
jmp 0x407dfd
cmp al, 0x67
jne 0x407baa
cmp byte [0x46bdb9], 0
je 0x4079cc
lea ecx, [esp + 0x44c]
push ecx
call fcn.00401000
lea edx, [esp + 0x44c]
mov dword [esp + 0x30b0], 3
mov ecx, edx
mov dword [esi + 0x20], edx
call fcn.00418c27
lea eax, [esp + 0x44c]
push eax
mov dword [esp + 0x30b4], 0xffffffff
call fcn.00401110
jmp 0x407e0d
cmp al, 0x7a
je 0x407e0d
lea ecx, [esp + 0x11c]
push ecx
call fcn.00402e20
lea ecx, [esp + 0x11c]
mov dword [esp + 0x30b0], 4
call fcn.00418c27
cmp eax, 1
je 0x407c15
mov edi, 0x46f148
call fcn.00409800
push 0x10
push 0x458100
push 0x45810c
push 0
call dword [sym.imp.USER32.dll_MessageBoxW]
lea ecx, [esp + 0x11c]
mov dword [esp + 0x30b0], 0xffffffff
call fcn.00402ec0
jmp 0x407e1d
lea eax, [esp + 0x2e94]
mov ecx, 0x46f0f8
call fcn.004073f0
test eax, eax
je 0x407d56
mov ecx, 0x104
lea eax, [esp + 0x2e94]
lea ebx, [ebx]
cmp word [eax], 0
je 0x407c50
add eax, 2
sub ecx, 1
jne 0x407c40
jmp 0x407c73
test ecx, ecx
je 0x407c73
mov eax, 0x104
sub eax, ecx
mov ecx, 0x104
sub ecx, eax
lea edx, [esp + eax*2 + 0x2e94]
mov eax, 0x45813c
call fcn.00407450
mov ebx, dword [sym.imp.KERNEL32.dll_GetFileAttributesW]
lea edx, [esp + 0x2e94]
push edx
call ebx
cmp eax, 0xffffffff
je 0x407d56
push 0x28
push 0x46f0f8
lea esi, [esp + 0x2e4c]
call fcn.004047a0
mov edi, esi
add esp, 8
lea esi, [esp + 0x2e94]
call fcn.0040a480
mov ecx, 0x104
mov eax, esi
cmp word [eax], 0
je 0x407cc7
add eax, 2
sub ecx, 1
jne 0x407cb7
jmp 0x407cea
test ecx, ecx
je 0x407cea
mov eax, 0x104
sub eax, ecx
mov ecx, 0x104
sub ecx, eax
lea edx, [esp + eax*2 + 0x2e94]
mov eax, 0x457f30
call fcn.00407450
lea eax, [esp + 0x2e94]
push eax
call ebx
cmp eax, 0xffffffff
je 0x407d52
xor ecx, ecx
mov word [esp + 0x2e44], cx
push 0x28
push 0x46f0f8
lea edx, [esp + 0x2e4c]
mov ecx, str.DisplayName
call fcn.00407360
add esp, 8
test eax, eax
je 0x407d52
lea edx, [esp + 0x2e44]
push edx
push 0x458158
mov ecx, 0x80
lea ebx, [esp + 0x2e9c]
call fcn.00402d10
add esp, 8
push 0x30
push 0x458100
mov eax, ebx
push eax
jmp 0x407bf1
mov esi, dword [esp + 0x10]
cmp byte [0x46cbc8], 0
je 0x407dbc
lea ecx, [esp + 0x23c]
push ecx
call fcn.004048f0
lea ecx, [esp + 0x23c]
mov byte [esp + 0x30b0], 5
call fcn.00418c27
cmp eax, 1
je 0x407da8
mov edi, 0x46f148
call fcn.00409800
lea ecx, [esp + 0x23c]
mov byte [esp + 0x30b0], 4
call fcn.004049d0
jmp 0x407bf9
lea ecx, [esp + 0x23c]
mov byte [esp + 0x30b0], 4
call fcn.004049d0
lea edx, [esp + 0x9c]
push edx
call fcn.00407f10
lea eax, [esp + 0x9c]
mov byte [esp + 0x30b0], 6
mov ecx, eax
mov dword [esi + 0x20], eax
call fcn.00418c27
lea ecx, [esp + 0x9c]
mov byte [esp + 0x30b0], 4
call fcn.004184d5
lea ecx, [esp + 0x11c]
mov dword [esp + 0x30b0], 0xffffffff
call fcn.00402ec0
mov edi, 0x46f148
call fcn.00409800
call dword [sym.imp.ole32.dll_CoUninitialize]
xor eax, eax
mov ecx, dword [esp + 0x30a8]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x3090]
xor ecx, esp
call fcn.00435010
mov esp, ebp
pop ebp
ret