Function at 0x401870
Capabilities:
Query environment variable
Read .ini file

Disassembly:
sub esp, 0x508
push ebx
push ebp
push esi
push edi
call fcn.00401060
mov esi, eax
mov eax, dword [str.Setup.INI]
push eax
mov ecx, esi
call fcn.004049d0
lea ecx, [esp + 0x11c]
push eax
push ecx
call fcn.00406800
lea ebx, [esi + 0x410]
lea edx, [esp + 0x118]
mov ecx, 0x100
xor eax, eax
mov edi, ebx
push edx
rep stosd dword es:[edi], eax
mov eax, dword [str.Product]
mov ecx, dword [str.Startup]
push 0x400
push ebx
push 0x413da0
push eax
push ecx
call dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringA]
push ebx
mov ebx, dword [sym.imp.KERNEL32.dll_lstrlenA]
call ebx
test eax, eax
jne 0x4018eb
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x508
ret
lea ebp, [esi + 0x810]
lea edx, [esp + 0x118]
mov ecx, 0x100
xor eax, eax
mov edi, ebp
push edx
rep stosd dword es:[edi], eax
mov eax, dword [str.PackageName]
mov ecx, dword [str.Startup]
push 0x400
push ebp
push 0x413da0
push eax
push ecx
call dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringA]
push ebp
call ebx
test eax, eax
jne 0x401934
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x508
ret
lea ebp, [esi + 0x10]
lea edx, [esp + 0x118]
mov ecx, 0x100
xor eax, eax
mov edi, ebp
push edx
rep stosd dword es:[edi], eax
mov eax, dword [str.MsiVersion]
mov ecx, dword [str.Startup]
mov edi, dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringA]
push 0x400
push ebp
push 0x413da0
push eax
push ecx
call edi
push ebp
call ebx
test eax, eax
jne 0x40197c
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x508
ret
mov ecx, dword [str.EnableLangDlg]
lea edx, [esp + 0x118]
push edx
mov edx, dword [str.Startup]
lea eax, [esp + 0x16]
push 2
push eax
push 0x413da0
xor ebp, ebp
push ecx
push edx
mov word [esp + 0x2a], bp
call edi
lea eax, [esp + 0x12]
push eax
call ebx
test eax, eax
jne 0x4019bd
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x508
ret
mov dword [esi + 0xc], ebp
mov eax, dword [0x41486c]
cmp eax, ebp
jne 0x4019e4
lea ecx, [esp + 0x12]
push 0x4110f4
push ecx
call dword [sym.imp.KERNEL32.dll_lstrcmpiA]
test eax, eax
jne 0x4019e4
mov dword [esi + 0xc], 1
mov ecx, 0x40
xor eax, eax
lea edi, [esp + 0x15]
mov byte [esp + 0x14], 0
rep stosd dword es:[edi], eax
mov ecx, dword [str.DiskSpace]
lea edx, [esp + 0x118]
stosw word es:[edi], ax
stosb byte es:[edi], al
push edx
mov edx, dword [str.Info]
lea eax, [esp + 0x18]
push 0x104
push eax
push 0x413da0
push ecx
push edx
call dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringA]
lea eax, [esp + 0x14]
mov dword [esi + 0x1014], 0x1f40
push eax
call ebx
test eax, eax
je 0x401a4c
lea ecx, [esp + 0x14]
push ecx
call fcn.00407617
add esp, 4
mov dword [esi + 0x1014], eax
lea ebp, [esi + 0x1018]
mov edi, 0x413da0
mov eax, ebp
mov dl, byte [eax]
mov bl, byte [edi]
mov cl, dl
cmp dl, bl
jne 0x401a81
test cl, cl
je 0x401a7d
mov dl, byte [eax + 1]
mov bl, byte [edi + 1]
mov cl, dl
cmp dl, bl
jne 0x401a81
add eax, 2
add edi, 2
test cl, cl
jne 0x401a59
xor eax, eax
jmp 0x401a86
sbb eax, eax
sbb eax, 0xffffffff
test eax, eax
jne 0x401ad5
mov ecx, dword [str.CmdLine]
mov edx, dword [str.Startup]
lea eax, [esp + 0x118]
push eax
push 0x400
push ebp
push 0x413da0
push ecx
push edx
call dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringA]
push 0x400
call fcn.004075d4
add esp, 4
mov edi, eax
push 0x400
push edi
push ebp
call dword [sym.imp.KERNEL32.dll_ExpandEnvironmentStringsA]
push edi
push ebp
call dword [sym.imp.KERNEL32.dll_lstrcpyA]
mov eax, dword [esi + 0x1420]
test eax, eax
jne 0x401b03
mov ecx, dword [str.Mode]
mov edx, dword [str.Startup]
lea eax, [esp + 0x118]
push eax
push 0
push ecx
push edx
call dword [sym.imp.KERNEL32.dll_GetPrivateProfileIntA]
mov dword [esi + 0x1420], eax
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0x508
ret