Function at 0x409510
Capabilities:
Accept command line arguments
Check os version
Create process on windows

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x4451d1
mov eax, dword fs:[0]
push eax
sub esp, 0x314
mov eax, dword [0x4563e4]
xor eax, ebp
mov dword [ebp - 0x14], eax
push ebx
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov dword [ebp - 0x10], esp
mov esi, ecx
lea eax, [esi + 0x30]
mov ebx, 8
mov dword [ebp - 0x31c], esi
cmp dword [eax + 0x14], ebx
jb 0x409558
mov eax, dword [eax]
push eax
call fcn.00407d00
add esp, 4
test al, al
je 0x409634
push str.Reboot_is_pending
push 0x457ab8
mov ecx, 0x44a294
call fcn.00418500
xor edi, edi
xor eax, eax
add esp, 8
mov dword [ebp - 0x228], 7
mov dword [ebp - 0x22c], edi
mov word [ebp - 0x23c], ax
lea ecx, [ebp - 0x23c]
push ecx
mov ecx, 0x1ff4
mov edx, 0x458de8
mov dword [ebp - 4], edi
call fcn.00413990
mov edx, dword [ebp - 0x23c]
cmp dword [ebp - 0x228], ebx
jae 0x4095c8
lea edx, [ebp - 0x23c]
push edi
push edi
push 0x4e20
push edi
mov ecx, 2
call fcn.004058e0
add esp, 0x10
mov dword [ebp - 4], 0xffffffff
cmp dword [ebp - 0x228], ebx
jb 0x4095fb
mov edx, dword [ebp - 0x23c]
push edx
call fcn.0042ee58
add esp, 4
push 0xa
push ebx
lea eax, [ebp - 0x230]
push eax
push 0x4e21
call fcn.0042fd54
add esp, 0x10
lea ecx, [ebp - 0x230]
push ecx
lea ecx, [esi + 4]
mov ebx, str.IIF_EXITCODE
call fcn.00416670
mov edx, dword [esi]
mov eax, dword [edx + 0x20]
mov ecx, esi
call eax
jmp 0x409b65
push str.Riched20.dll
call dword [sym.imp.KERNEL32.dll_LoadLibraryW]
mov dword [ebp - 4], 1
call fcn.004217b0
test al, al
jne 0x40983b
call dword [sym.imp.KERNEL32.dll_GetVersion]
cmp ax, 6
jb 0x4097f6
xor ecx, ecx
mov dword [ebp - 0x228], 7
mov dword [ebp - 0x22c], 0
mov word [ebp - 0x23c], cx
push str.Relaunching_setup_as_elevated
push 0x457ab8
mov ecx, 0x449300
mov byte [ebp - 4], 2
call fcn.00418500
add esp, 8
call dword [sym.imp.KERNEL32.dll_GetCommandLineW]
push eax
lea edx, [ebp - 0x220]
push 0x104
push edx
call fcn.0042eee3
add esp, 0xc
lea eax, [ebp - 0x220]
push eax
call dword [sym.imp.SHLWAPI.dll_PathGetArgsW]
mov ecx, eax
lea esi, [ecx + 2]
jmp 0x4096d0
mov dx, word [ecx]
add ecx, 2
test dx, dx
jne 0x4096d0
sub ecx, esi
sar ecx, 1
push ecx
lea esi, [ebp - 0x23c]
call fcn.00403fb0
lea ecx, [ebp - 0x220]
push ecx
call dword [sym.imp.SHLWAPI.dll_PathRemoveArgsW]
lea edx, [ebp - 0x220]
push edx
call dword [sym.imp.SHLWAPI.dll_PathQuoteSpacesW]
push 0
push 0
call dword [sym.imp.KERNEL32.dll_GetModuleHandleW]
push eax
push 0
push 0
push 1
push 1
push 0
push 0
push 0x90000000
push 0x44a650
push str.BUTTON
push 0
call dword [sym.imp.USER32.dll_CreateWindowExW]
mov esi, eax
test esi, esi
je 0x4097be
lea eax, [ebp - 0x264]
push eax
push 2
push esi
mov dword [ebp - 0x264], 0x28
call dword [sym.imp.USER32.dll_MonitorFromWindow]
push eax
call dword [sym.imp.USER32.dll_GetMonitorInfoW]
mov eax, dword [ebp - 0x254]
sub eax, dword [ebp - 0x25c]
push 0
cdq
sub eax, edx
push 1
sar eax, 1
push 1
push eax
mov eax, dword [ebp - 0x258]
sub eax, dword [ebp - 0x260]
cdq
sub eax, edx
sar eax, 1
push eax
push esi
call dword [sym.imp.USER32.dll_MoveWindow]
cmp dword [ebp - 0x228], 8
mov eax, dword [ebp - 0x23c]
jae 0x4097a4
lea eax, [ebp - 0x23c]
push 5
push 0
push eax
lea ecx, [ebp - 0x220]
push ecx
push str.runas
push esi
call dword [sym.imp.SHELL32.dll_ShellExecuteW]
jmp 0x4097d5
push str.Error_creating_top_level_window.
push 0x457ab8
mov ecx, 0x44a294
call fcn.00418500
add esp, 8
cmp dword [ebp - 0x228], 8
jb 0x409b65
mov edx, dword [ebp - 0x23c]
push edx
call fcn.0042ee58
add esp, 4
jmp 0x409b65
push str.Administrator_rights_needed.
push 0x457ab8
mov ecx, 0x44a294
call fcn.00418500
add esp, 8
push 0x1fe
push 5
lea eax, [ebp - 0x318]
push eax
mov ecx, str.Setup.cpp
mov ebx, 0x44a650
call fcn.00407ad0
push 0x450534
lea ecx, [ebp - 0x318]
push ecx
call fcn.00430884
lea edi, [esi + 4]
mov ebx, str.IIF_INSTALLEDPACKAGEVERSION
call fcn.00416630
test al, al
jne 0x409890
push esi
call fcn.00409db0
cmp eax, 0xd
je 0x409862
push esi
call fcn.00409db0
cmp eax, 0xc
jne 0x409890
push str._uninstall_and__repair_is_invalid_if_the_product_is_not_installed
push 0x457ab8
mov ecx, 0x44a228
call fcn.00418500
add esp, 8
mov eax, esi
call fcn.00409f50
test al, al
jne 0x409b65
push esi
xor ecx, ecx
call fcn.0040d1a0
push esi
call fcn.00409db0
test eax, eax
jne 0x40989f
call fcn.00409270
push esi
call fcn.00409db0
cmp eax, 0xd
ja case.0x4098b1.1
movzx edx, byte [eax + 0x409ba0]
jmp dword [edx*4 + 0x409b84]
push str.Setup_mode:_None
push 0x457ab8
mov ecx, 0x449300
call fcn.00418500
add esp, 8
jmp case.0x4098b1.1
push str.Setup_mode:_Installation
jmp 0x4098f2
push str.Setup_mode:_Update
jmp 0x4098f2
push str.Setup_mode:_Repair
jmp 0x4098f2
push str.Setup_mode:_Uninstall
jmp 0x4098bd
push str.Setup_mode:_Modify
push 0x457ab8
mov ecx, 0x449300
call fcn.00418500
mov eax, dword [esi]
mov edx, dword [eax + 0x54]
add esp, 8
mov ecx, esi
call edx
push esi
call fcn.00409db0
test eax, eax
je 0x4099ed
lea ebx, [esi + 0x128]
call fcn.004221a0
mov eax, esi
call fcn.00409f50
mov ecx, 0x449300
test al, al
je 0x409975
push str.Silent_mode_is_enabled
push 0x457ab8
call fcn.00418500
mov eax, dword [esi]
mov edx, dword [eax + 0x14]
add esp, 8
mov ecx, esi
mov dword [esi + 0x148], 0
call edx
mov eax, dword [esi]
mov edx, dword [eax + 0x24]
mov ecx, esi
call edx
mov eax, dword [esi + 0x140]
push 0xffffffffffffffff
push eax
call dword [sym.imp.KERNEL32.dll_WaitForSingleObject]
jmp 0x409990
push str.Preparing_UI
push 0x457ab8
call fcn.00418500
mov edx, dword [esi]
mov eax, dword [edx + 0x5c]
add esp, 8
mov ecx, esi
call eax
push str.IIF_EXITCODE
call fcn.00416580
push eax
call fcn.0042ffad
add esp, 4
test eax, eax
je 0x4099b5
cmp eax, 0x669
je 0x4099b5
cmp eax, 0xbc2
jne 0x4099ed
cmp byte [esi + 0x13c], 0
je 0x4099ed
push esi
call fcn.00409db0
cmp eax, 9
jl 0x4099ed
cmp eax, 0xc
jle 0x4099e6
cmp eax, 0xd
jne 0x4099ed
mov ecx, esi
call fcn.00408ee0
mov dword [ebp - 4], 0xffffffff
jmp 0x409b1d
mov ecx, esi
call fcn.004087c0
mov dword [ebp - 4], 0xffffffff
jmp 0x409b1d
push str.IIF_EXITCODE
lea edi, [esi + 4]
call fcn.00416580
push eax
call fcn.0042ffad
add esp, 4
cmp eax, 0xbc2
jne 0x409b65
cmp dword [esi + 0x44], 8
lea eax, [esi + 0x30]
jb 0x409b45
mov eax, dword [eax]
push eax
call fcn.00407d70
add esp, 4
push str.Created_reboot_lock
push 0x457ab8
mov ecx, 0x449300
call fcn.00418500
add esp, 8
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 0x14]
xor ecx, ebp
call fcn.0042ee49
mov esp, ebp
pop ebp
ret