Function at 0x402db0
Capabilities:
Accept command line arguments
Check os version
Create process on windows
Get disk information

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff0
sub esp, 0x478
mov eax, dword [0x424008]
xor eax, esp
mov dword [esp + 0x474], eax
push esi
push edi
mov edi, dword [ebp + 8]
xorps xmm0, xmm0
mov ecx, edi
movaps xmmword [esp + 0x10], xmm0
movq qword [esp + 0x20], xmm0
mov dword [esp + 0x28], 0
call fcn.00401bf0
test eax, eax
je 0x403243
push 0x425c64
push 1
push 0
push 0
call dword [sym.imp.KERNEL32.dll_CreateSemaphoreA]
mov dword [0x425180], eax
call dword [sym.imp.KERNEL32.dll_GetLastError]
cmp eax, 0xb7
jne 0x402e3b
push dword [0x425180]
call dword [sym.imp.KERNEL32.dll_CloseHandle]
xor eax, eax
pop edi
pop esi
mov ecx, dword [esp + 0x474]
xor ecx, esp
call fcn.0040a88f
mov esp, ebp
pop ebp
ret 0x10
call dword [sym.imp.KERNEL32.dll_GetCommandLineA]
push 0x200
mov esi, eax
lea eax, [esp + 0x27c]
push 0
push eax
call fcn.0040bb50
add esp, 0xc
lea eax, [esp + 0x278]
push 0x1ff
push eax
push 0
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameA]
cmp byte [esi], 0x22
jne 0x402e75
inc esi
lea eax, [esp + 0x278]
push eax
call dword [sym.imp.KERNEL32.dll_lstrlenA]
mov dh, byte [eax + esi]
add eax, esi
mov dl, dh
cmp dh, 0x22
jne 0x402e92
mov dl, byte [eax + 1]
lea ecx, [eax + 1]
cmp dh, 0x22
push 0x200
cmovne ecx, eax
cmp dl, 0x20
lea eax, [ecx + 1]
cmovne eax, ecx
push eax
push 0x42d520
call fcn.0040cfc0
add esp, 0xc
push 7
push str.Install
push 0x42d520
call fcn.0040d0f0
add esp, 0xc
test eax, eax
jne 0x402eee
xor ecx, ecx
mov al, byte [ecx + 0x42d528]
lea ecx, [ecx + 1]
mov byte [ecx + 0x42520b], al
test al, al
jne 0x402ed1
mov eax, 1
jmp 0x403179
mov ecx, 0x4209b8
mov eax, 0x42d520
mov dl, byte [eax]
cmp dl, byte [ecx]
jne 0x402f18
test dl, dl
je 0x402f14
mov dl, byte [eax + 1]
cmp dl, byte [ecx + 1]
jne 0x402f18
add eax, 2
add ecx, 2
test dl, dl
jne 0x402ef8
xor eax, eax
jmp 0x402f1d
sbb eax, eax
or eax, 1
test eax, eax
jne 0x402f38
call fcn.00409260
test eax, eax
jne 0x403243
mov eax, dword [0x425518]
jmp 0x40317e
mov ecx, str.Uninstall
mov eax, 0x42d520
mov dl, byte [eax]
cmp dl, byte [ecx]
jne 0x402f62
test dl, dl
je 0x402f5e
mov dl, byte [eax + 1]
cmp dl, byte [ecx + 1]
jne 0x402f62
add eax, 2
add ecx, 2
test dl, dl
jne 0x402f42
xor eax, eax
jmp 0x402f67
sbb eax, eax
or eax, 1
test eax, eax
jne 0x402f75
mov eax, 2
jmp 0x403179
push 0x42520c
call dword [sym.imp.KERNEL32.dll_GetDriveTypeA]
cmp eax, 5
jne 0x4030e3
push 0x90
lea eax, [esp + 0x178]
push 0
push eax
call fcn.0040bb50
add esp, 0xc
mov dword [esp + 0x170], 0x94
lea eax, [esp + 0x170]
push eax
call dword [sym.imp.KERNEL32.dll_GetVersionExA]
mov eax, dword [esp + 0x180]
mov esi, dword [sym.imp.KERNEL32.dll_LoadLibraryA]
sub eax, 1
je 0x403053
sub eax, 1
jne 0x403069
push str.shell32.dll
call esi
test eax, eax
je 0x403069
push str.IsUserAnAdmin
push eax
call dword [sym.imp.KERNEL32.dll_GetProcAddress]
test eax, eax
je 0x403069
call eax
test eax, eax
je 0x403069
push str.d3d9.dll
call esi
test eax, eax
je 0x40309c
push eax
call dword [sym.imp.KERNEL32.dll_FreeLibrary]
call fcn.00408100
test eax, eax
jne 0x403177
push eax
push 0x406f00
push dword [0x425188]
push 0x76
push edi
call dword [sym.imp.USER32.dll_DialogBoxParamA]
test eax, eax
jne 0x403177
pop edi
pop esi
mov ecx, dword [esp + 0x474]
xor ecx, esp
call fcn.0040a88f
mov esp, ebp
pop ebp
ret 0x10
cmp dword [esp + 0x174], 4
ja 0x402ffd
jne 0x403069
cmp dword [esp + 0x178], 0
ja 0x402ffd
push 0x20
push 0x42564c
push 0x4209c8
push dword [0x425188]
call dword [sym.imp.USER32.dll_MessageBoxA]
mov eax, 1
pop edi
pop esi
mov ecx, dword [esp + 0x474]
xor ecx, esp
call fcn.0040a88f
mov esp, ebp
pop ebp
ret 0x10
push 0
push 0x401a60
push dword [0x425188]
push 0x75
push edi
call dword [sym.imp.USER32.dll_DialogBoxParamA]
test eax, eax
je 0x403243
push 1
push str.DirectXDXSETUP.exe
call dword [sym.imp.KERNEL32.dll_WinExec]
cmp eax, 0x1f
ja 0x403243
push 0x30
push 0x4207fc
push str.DXSETUP.exe
push 0
jmp 0x40323d
mov esi, dword [sym.imp.USER32.dll_wsprintfA]
lea eax, [esp + 0x170]
push 0x425750
push 0x425548
push 0x425414
push str._s_s_s
push eax
call esi
add esp, 0x14
lea eax, [esp + 0x170]
push str..ini
push eax
call dword [sym.imp.SHLWAPI.dll_PathRenameExtensionA]
lea eax, [esp + 0x30]
push eax
lea eax, [esp + 0x174]
push eax
call dword [sym.imp.KERNEL32.dll_FindFirstFileA]
cmp eax, 0xffffffff
jne 0x403170
push str.Setup.ini
push 0x42520c
lea eax, [esp + 0x178]
push 0x42086c
push eax
call esi
add esp, 0x10
lea eax, [esp + 0x278]
push eax
lea eax, [esp + 0x174]
push eax
call dword [sym.imp.KERNEL32.dll_FindFirstFileA]
cmp eax, 0xffffffff
je 0x40322b
push eax
call dword [sym.imp.KERNEL32.dll_FindClose]
xor eax, eax
mov dword [0x425518], eax
sub eax, 1
je 0x4031f8
sub eax, 1
je 0x4031d9
mov ecx, edi
call fcn.00402b50
test eax, eax
je 0x403081
mov edi, dword [sym.imp.USER32.dll_PeekMessageA]
mov esi, dword [sym.imp.USER32.dll_WaitMessage]
push 1
push 0
push 0
push 0
lea eax, [esp + 0x20]
push eax
call edi
test eax, eax
je 0x4031d5
cmp dword [esp + 0x14], 0x12
je 0x40320c
lea eax, [esp + 0x10]
push eax
call dword [sym.imp.USER32.dll_TranslateMessage]
lea eax, [esp + 0x10]
push eax
call dword [sym.imp.USER32.dll_DispatchMessageA]
jmp 0x4031a3
call esi
jmp 0x4031a3
call fcn.004089a0
mov eax, dword [esp + 0x18]
pop edi
pop esi
mov ecx, dword [esp + 0x474]
xor ecx, esp
call fcn.0040a88f
mov esp, ebp
pop ebp
ret 0x10
mov ecx, edi
call fcn.00402b50
test eax, eax
je 0x403081
call fcn.00405da0
call fcn.00402b10
mov eax, dword [esp + 0x18]
pop edi
pop esi
mov ecx, dword [esp + 0x474]
xor ecx, esp
call fcn.0040a88f
mov esp, ebp
pop ebp
ret 0x10
push 0x20
push 0x42564c
push 0x420a18
push dword [0x425188]
call dword [sym.imp.USER32.dll_MessageBoxA]
mov ecx, dword [esp + 0x47c]
xor eax, eax
pop edi
pop esi
xor ecx, esp
call fcn.0040a88f
mov esp, ebp
pop ebp
ret 0x10