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

Disassembly:
push 0xffffffffffffffff
push 0x433068
mov eax, dword fs:[0]
push eax
sub esp, 0x50
mov eax, dword [0x446050]
xor eax, esp
mov dword [esp + 0x4c], eax
push ebx
push ebp
push esi
mov eax, dword [0x446050]
xor eax, esp
push eax
lea eax, [esp + 0x60]
mov dword fs:[0], eax
lea eax, [edi + 0x24]
push eax
mov dword [esp + 0x24], eax
lea eax, [esp + 0x44]
push eax
mov ecx, str.SystemCurrentControlSetServices_
call fcn.0040a900
add esp, 8
xor eax, eax
mov dword [esp + 0x68], eax
cmp dword [esp + 0x58], 0x10
mov ecx, dword [esp + 0x44]
jae 0x403270
lea ecx, [esp + 0x44]
lea ebx, [esp + 0x14]
mov dword [esp + 0x14], eax
call fcn.00411810
mov esi, eax
mov eax, dword [esp + 0x14]
xor ebx, ebx
cmp eax, ebx
je 0x403290
push eax
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
push esi
call dword [sym.imp.KERNEL32.dll_SetLastError]
mov dword [edi + 4], ebx
mov dword [edi + 0x148], ebx
mov dword [edi + 0x14c], ebx
mov byte [edi + 0x158], bl
mov dword [edi + 0x150], ebx
mov dword [edi + 0x154], ebx
mov byte [edi + 0x159], bl
mov byte [edi + 0x15a], bl
cmp esi, ebx
sete cl
mov byte [edi], cl
mov edx, dword [str.Not_available]
mov dword [edi + 0xc4], edx
mov eax, dword [0x4365b4]
mov dword [edi + 0xc8], eax
mov ecx, dword [0x4365b8]
mov dword [edi + 0xcc], ecx
mov dx, word [0x4365bc]
mov word [edi + 0xd0], dx
mov eax, dword [str.Not_installed]
mov dword [edi + 0x104], eax
mov ecx, dword [0x4365c4]
mov dword [edi + 0x108], ecx
mov edx, dword [0x4365c8]
mov dword [edi + 0x10c], edx
mov ax, word [0x4365cc]
lea esi, [edi + 0xac]
mov word [edi + 0x110], ax
mov ebx, dword [esi + 0x10]
cmp dword [esi + 0xc], ebx
jbe 0x40333f
call fcn.00420164
mov ebp, dword [esi + 0xc]
mov ecx, dword [esi]
mov dword [esp + 0x14], ecx
cmp ebp, dword [esi + 0x10]
jbe 0x403352
call fcn.00420164
mov edx, dword [esp + 0x14]
mov eax, dword [esi]
push ebx
push edx
push ebp
push eax
lea ebx, [esp + 0x24]
call fcn.004099e0
mov esi, 0x10
cmp dword [edi + 0x58], esi
jb 0x403374
mov eax, dword [edi + 0x44]
jmp 0x403377
lea eax, [edi + 0x44]
push eax
push 0x448840
push 0x436a34
lea ecx, [esp + 0x30]
call fcn.004172c0
add esp, 0xc
mov byte [esp + 0x68], 1
push 0xffffffffffffffff
push 0
push eax
lea ecx, [esp + 0x4c]
call fcn.004096e0
mov byte [esp + 0x68], 0
cmp dword [esp + 0x3c], esi
jb 0x4033b9
mov eax, dword [esp + 0x28]
push eax
call fcn.0042019e
add esp, 4
mov eax, dword [esp + 0x44]
mov dword [esp + 0x3c], 0xf
mov dword [esp + 0x38], 0
mov byte [esp + 0x28], 0
cmp dword [esp + 0x58], esi
jae 0x4033dc
lea eax, [esp + 0x44]
push eax
call dword [sym.imp.KERNEL32.dll_GetFileAttributesA]
mov ebx, eax
cmp ebx, 0xffffffff
jne 0x403481
call dword [sym.imp.KERNEL32.dll_GetLastError]
mov esi, eax
test esi, esi
jne 0x403404
test bl, 0x10
je 0x403404
mov esi, 2
push esi
call dword [sym.imp.KERNEL32.dll_SetLastError]
mov ecx, dword [edi + 0xa4]
xor ebp, ebp
cmp esi, ebp
sete byte [esp + 0x13]
sub ecx, dword [edi + 0xa0]
mov eax, 0x92492493
imul ecx
add edx, ecx
sar edx, 4
mov ecx, edx
shr ecx, 0x1f
add ecx, edx
je 0x4035e0
mov dword [esp + 0x14], ebp
lea ecx, [ecx]
mov ecx, dword [edi + 0xa4]
sub ecx, dword [edi + 0xa0]
mov eax, 0x92492493
imul ecx
add edx, ecx
sar edx, 4
mov eax, edx
shr eax, 0x1f
add eax, edx
cmp ebp, eax
jb 0x403468
call fcn.00420164
mov eax, dword [edi + 0xa0]
add eax, dword [esp + 0x14]
mov esi, 0x10
cmp dword [eax + 0x18], esi
jb 0x403488
mov eax, dword [eax + 4]
jmp 0x40348b
xor esi, esi
jmp 0x4033fa
add eax, 4
push eax
push 0x448840
push 0x436a34
lea ecx, [esp + 0x30]
call fcn.004172c0
add esp, 0xc
mov byte [esp + 0x68], 2
push 0xffffffffffffffff
push 0
push eax
lea ecx, [esp + 0x4c]
call fcn.004096e0
mov byte [esp + 0x68], 0
cmp dword [esp + 0x3c], esi
jb 0x4034cd
mov ecx, dword [esp + 0x28]
push ecx
call fcn.0042019e
add esp, 4
mov eax, dword [esp + 0x44]
mov dword [esp + 0x3c], 0xf
mov dword [esp + 0x38], 0
mov byte [esp + 0x28], 0
cmp dword [esp + 0x58], esi
jae 0x4034f0
lea eax, [esp + 0x44]
push eax
call dword [sym.imp.KERNEL32.dll_GetFileAttributesA]
mov ebx, eax
cmp ebx, 0xffffffff
jne 0x403560
call dword [sym.imp.KERNEL32.dll_GetLastError]
mov esi, eax
test esi, esi
jne 0x403514
test bl, 0x10
je 0x403514
mov esi, 2
push esi
call dword [sym.imp.KERNEL32.dll_SetLastError]
test esi, esi
je 0x4035b3
mov ecx, dword [edi + 0xa4]
sub ecx, dword [edi + 0xa0]
mov eax, 0x92492493
imul ecx
add edx, ecx
sar edx, 4
mov eax, edx
shr eax, 0x1f
add eax, edx
cmp ebp, eax
jb 0x40354b
call fcn.00420164
mov eax, dword [edi + 0xa0]
add eax, dword [esp + 0x14]
cmp dword [eax + 0x18], 0x10
jb 0x403564
mov eax, dword [eax + 4]
jmp 0x403567
xor esi, esi
jmp 0x40350a
add eax, 4
push eax
push str.Expected_file__s_not_found_among_sources
call fcn.0040d8e0
mov ecx, dword [edi + 0xa4]
sub ecx, dword [edi + 0xa0]
mov eax, 0x92492493
imul ecx
add edx, ecx
sar edx, 4
mov ecx, edx
shr ecx, 0x1f
add ecx, edx
add esp, 8
cmp ebp, ecx
jb 0x40359d
call fcn.00420164
mov edx, dword [edi + 0xa0]
add edx, dword [esp + 0x14]
lea ebx, [edi + 0xac]
push edx
call fcn.00409460
mov ecx, dword [edi + 0xa4]
sub ecx, dword [edi + 0xa0]
add dword [esp + 0x14], 0x1c
mov eax, 0x92492493
imul ecx
add edx, ecx
sar edx, 4
mov eax, edx
shr eax, 0x1f
inc ebp
add eax, edx
cmp ebp, eax
jb 0x403440
cmp byte [esp + 0x13], 0
mov esi, 0x10
je 0x403612
mov ecx, dword [edi + 0xbc]
sub ecx, dword [edi + 0xb8]
mov eax, 0x92492493
imul ecx
add edx, ecx
sar edx, 4
mov ecx, edx
shr ecx, 0x1f
add ecx, edx
jne 0x403612
lea eax, [esi - 0xf]
jmp 0x403614
xor eax, eax
mov byte [edi + 2], al
test al, al
je 0x4036b1
cmp dword [edi + 0x58], esi
jb 0x403629
mov eax, dword [edi + 0x44]
jmp 0x40362c
lea eax, [edi + 0x44]
push eax
push 0x448840
push 0x436a34
lea ecx, [esp + 0x30]
call fcn.004172c0
add esp, 0xc
mov byte [esp + 0x68], 3
mov ecx, dword [esp + 0x28]
cmp dword [esp + 0x3c], esi
jae 0x403656
lea ecx, [esp + 0x28]
lea edx, [edi + 0xc4]
call fcn.004113a0
mov dword [edi + 0x14c], edx
cmp word [edi + 0x14c], 0x64
mov dword [edi + 0x148], eax
mov edx, eax
setae al
mov dword [esp + 0x14], edx
mov byte [edi + 0x158], al
mov byte [esp + 0x68], 0
cmp dword [esp + 0x3c], esi
jb 0x40369c
mov ecx, dword [esp + 0x28]
push ecx
call fcn.0042019e
add esp, 4
mov dword [esp + 0x3c], 0xf
mov dword [esp + 0x38], 0
mov byte [esp + 0x28], 0
cmp byte [edi], 0
je 0x4037dd
cmp byte [edi + 2], 0
mov ebx, 4
je 0x4036c8
or dword [edi + 4], ebx
cmp dword [edi + 0x74], esi
jb 0x4036d2
mov eax, dword [edi + 0x60]
jmp 0x4036d5
lea eax, [edi + 0x60]
push eax
push 0x449080
push 0x436a34
lea ecx, [esp + 0x30]
call fcn.004172c0
add esp, 0xc
mov byte [esp + 0x68], bl
mov ecx, dword [esp + 0x28]
cmp dword [esp + 0x3c], esi
jae 0x4036fe
lea ecx, [esp + 0x28]
lea edx, [edi + 0x104]
call fcn.004113a0
mov esi, dword [edi + 0x14c]
mov ecx, edx
mov dword [edi + 0x154], edx
mov edx, dword [edi + 0x148]
cmp cx, 0x64
setae bl
mov ebp, edx
or ebp, esi
mov dword [edi + 0x150], eax
mov dword [esp + 0x14], eax
mov byte [edi + 0x159], bl
je 0x40378c
mov ebp, eax
or ebp, ecx
je 0x40378c
movzx ebp, byte [0x449dbe]
push ebp
push ecx
push eax
push esi
push edx
call fcn.004112f0
add esp, 0x14
test al, al
je 0x40378c
mov eax, dword [esp + 0x20]
or dword [edi + 4], 2
cmp dword [eax + 0x18], 0x10
jb 0x403779
mov eax, dword [eax + 4]
push eax
push str._s_can_be_upgraded
call fcn.0040d8e0
add esp, 8
jmp 0x4037a8
add eax, 4
push eax
push str._s_can_be_upgraded
call fcn.0040d8e0
add esp, 8
jmp 0x4037a8
test bl, bl
je 0x4037a0
cmp byte [edi + 0x158], 0
jne 0x4037a0
mov eax, 1
jmp 0x4037a2
xor eax, eax
mov byte [edi + 0x15a], al
mov byte [esp + 0x68], 0
cmp dword [esp + 0x3c], 0x10
jb 0x4037c1
mov edx, dword [esp + 0x28]
push edx
call fcn.0042019e
add esp, 4
mov dword [esp + 0x3c], 0xf
mov dword [esp + 0x38], 0
mov byte [esp + 0x28], 0
mov esi, 0x10
jmp 0x403806
cmp byte [edi + 2], 0
je 0x403806
mov eax, dword [esp + 0x20]
or dword [edi + 4], 1
cmp dword [eax + 0x18], esi
jb 0x4037f5
mov eax, dword [eax + 4]
jmp 0x4037f8
add eax, 4
push eax
push str._s_can_be_installed
call fcn.0040d8e0
add esp, 8
mov dword [esp + 0x68], 0xffffffff
cmp dword [esp + 0x58], esi
jb 0x403821
mov eax, dword [esp + 0x44]
push eax
call fcn.0042019e
add esp, 4
mov dword [esp + 0x58], 0xf
mov dword [esp + 0x54], 0
mov byte [esp + 0x44], 0
mov ecx, dword [esp + 0x60]
mov dword fs:[0], ecx
pop ecx
pop esi
pop ebp
pop ebx
mov ecx, dword [esp + 0x4c]
xor ecx, esp
call fcn.0041f826
add esp, 0x5c
ret