Function at 0x408850
Capabilities:
Get system information on windows
Resolve function by parsing pe exports

Disassembly:
push 0xffffffffffffffff
push 0x456976
mov eax, dword fs:[0]
push eax
sub esp, 0x3d8
mov eax, dword [0x471050]
xor eax, esp
mov dword [esp + 0x3d0], eax
push ebx
push ebp
push esi
push edi
mov eax, dword [0x471050]
xor eax, esp
push eax
lea eax, [esp + 0x3ec]
mov dword fs:[0], eax
mov eax, dword [esp + 0x3fc]
xor ebp, ebp
mov ebx, ecx
mov dword [esp + 0x20], ebx
cmp eax, ebp
je 0x408c52
mov dword [0x4736bc], eax
cmp dword [0x4736c0], ebp
jne 0x4090b0
mov dword [esp + 0x24], str.LogMessage
mov dword [esp + 0x28], 0x409840
mov dword [esp + 0x2c], str.FlushLogMessage
mov dword [esp + 0x30], 0x409920
mov dword [esp + 0x34], str.YesNoMessageBox
mov dword [esp + 0x38], 0x409970
mov dword [esp + 0x3c], str.OKMessageBox
mov dword [esp + 0x40], 0x409b80
mov dword [esp + 0x44], str.RetryCancelMessageBox
mov dword [esp + 0x48], 0x409d80
mov dword [esp + 0x4c], 0x45d544
mov dword [esp + 0x50], 0x409f90
mov dword [esp + 0x54], str.GetSpecialFolderName
mov dword [esp + 0x58], 0x409fd0
mov dword [esp + 0x5c], str.CreateFolder
mov dword [esp + 0x60], 0x40a480
mov dword [esp + 0x64], str.CopyFile
mov dword [esp + 0x68], 0x40a5b0
mov dword [esp + 0x6c], str.IsFileExists
mov dword [esp + 0x70], 0x40a860
mov dword [esp + 0x74], str.IsWindowsXP
mov dword [esp + 0x78], 0x40a8f0
mov dword [esp + 0x7c], str.IsGameRunning
mov dword [esp + 0x80], 0x40a980
mov dword [esp + 0x84], str.UpdateConfigStudioName
mov dword [esp + 0x88], 0x40abd0
mov dword [esp + 0x8c], str.UpdateConfigDefaultGameName
mov dword [esp + 0x90], 0x40ac70
mov dword [esp + 0x94], str.UpdateConfigDisplayGameName
mov dword [esp + 0x98], 0x40ad00
mov dword [esp + 0x9c], str.UpdateConfigLocale
mov dword [esp + 0xa0], 0x40ad90
mov dword [esp + 0xa4], str.UpdateConfigInstallLocation
mov dword [esp + 0xa8], 0x40ae20
mov dword [esp + 0xac], str.IsRegKeyStringExist
mov dword [esp + 0xb0], 0x40aeb0
mov dword [esp + 0xb4], str.GetRegKeyString
mov dword [esp + 0xb8], 0x40b120
mov dword [esp + 0xbc], str.SetRegKeyString
mov dword [esp + 0xc0], 0x40b440
mov dword [esp + 0xc4], str.GetRegKeyInt
mov dword [esp + 0xc8], 0x40b620
mov dword [esp + 0xcc], str.SetRegKeyInt
mov dword [esp + 0xd0], 0x40b7b0
mov dword [esp + 0xd4], str.DelRegTree
mov dword [esp + 0xd8], 0x40b950
mov dword [esp + 0xdc], str.DelRegKeyIfEmpty
mov dword [esp + 0xe0], 0x40b9f0
mov dword [esp + 0xe4], str.Progress
mov dword [esp + 0xe8], 0x40bb10
mov dword [esp + 0xec], str.IsMsiProductInstalled
mov dword [esp + 0xf0], 0x40bb40
mov dword [esp + 0xf4], str.IsOSMatched
mov dword [esp + 0xf8], 0x40bbd0
mov dword [esp + 0xfc], 0x45d6d0
mov dword [esp + 0x100], 0x40bfa0
mov dword [esp + 0x104], str.RunAbsoluteExePath
mov dword [esp + 0x108], 0x40c300
mov dword [esp + 0x10c], str.RunExePathWithWUSA
mov dword [esp + 0x110], 0x40c770
mov dword [esp + 0x114], str.DelSpecialPath
mov dword [esp + 0x118], 0x40ca60
mov dword [esp + 0x11c], str.DelDirTree
mov dword [esp + 0x120], 0x40d410
mov dword [esp + 0x124], str.DelFromManifest
mov dword [esp + 0x128], 0x40d4f0
mov dword [esp + 0x12c], str.InstallGDF
mov dword [esp + 0x130], 0x40d640
mov dword [esp + 0x134], str.UninstallGDF
mov dword [esp + 0x138], 0x40db20
mov dword [esp + 0x13c], str.AddFirewallException
mov dword [esp + 0x140], 0x40e190
mov dword [esp + 0x144], str.RemoveFirewallException
mov dword [esp + 0x148], 0x40e2c0
mov dword [esp + 0x14c], str.CreateShortcut
mov dword [esp + 0x150], 0x40ea00
mov dword [esp + 0x154], str.CreateShortcutWithArgument
mov dword [esp + 0x158], 0x40eac0
mov dword [esp + 0x15c], str.CreateUrlShortcut
mov dword [esp + 0x160], 0x40eb90
mov dword [esp + 0x164], str.RemoveShortcut
xor ecx, ecx
mov eax, 0x2b
mov edx, 8
mul edx
seto cl
mov dword [esp + 0x168], 0x40eff0
mov dword [esp + 0x16c], str.DeleteSavedGameFolder
mov dword [esp + 0x170], 0x40f3a0
mov dword [esp + 0x174], ebp
mov dword [esp + 0x178], ebp
neg ecx
or ecx, eax
push ecx
call fcn.0042c9de
add esp, 4
mov dword [0x4736c4], eax
cmp eax, ebp
jne 0x408c59
mov eax, dword [0x4736bc]
push str.ERROR:_Unable_to_initialize_data_reader_
push eax
call fcn.00408140
add esp, 8
xor al, al
jmp 0x4090b2
mov edi, eax
mov ecx, 0x56
lea esi, [esp + 0x24]
rep movsd dword es:[edi], dword [esi]
call fcn.00411fa0
cmp eax, ebp
je 0x408c79
mov ecx, dword [eax + 0x10]
mov dword [ecx + 0x58], 0x411ac0
mov dword [0x4736c0], eax
cmp eax, ebp
jne 0x408cb4
mov edx, dword [0x4736bc]
push str.ERROR:_Unable_to_open_data_reader_
push edx
call fcn.00408140
mov eax, dword [0x4736c4]
push eax
call fcn.0042d587
add esp, 0xc
mov dword [0x4736c4], ebp
mov dword [0x4736c0], ebp
xor al, al
jmp 0x4090b2
call fcn.00411b20
mov eax, dword [0x4736c4]
mov edx, dword [0x4736c0]
mov ecx, str.inst
call fcn.00410f60
mov ecx, dword [0x4736bc]
push str.Data_reader_initialized.
push ecx
call fcn.00408140
add esp, 8
cmp ebx, ebp
je 0x408eda
mov eax, dword [ebx + 0x14]
mov ebx, dword [ebx]
mov ebp, dword [eax]
mov dword [esp + 0x18], ebx
mov eax, dword [esp + 0x20]
mov esi, dword [eax + 0x14]
mov eax, dword [eax]
mov dword [esp + 0x1c], ebp
test ebx, ebx
je 0x408d0a
cmp ebx, eax
je 0x408d0f
call fcn.0042ccd4
cmp ebp, esi
je 0x408ed8
test ebx, ebx
jne 0x408d3b
call fcn.0042ccd4
xor eax, eax
cmp ebp, dword [eax + 0x14]
jne 0x408d2c
call fcn.0042ccd4
mov esi, 8
cmp dword [ebp + 0x20], esi
jb 0x408d3f
mov eax, dword [ebp + 0xc]
jmp 0x408d42
mov eax, dword [ebx]
jmp 0x408d22
lea eax, [ebp + 0xc]
push eax
lea edi, [esp + 0x1c4]
call fcn.00404af0
add esp, 4
mov dword [esp + 0x3f4], 0
test ebx, ebx
jne 0x408d7c
call fcn.0042ccd4
xor eax, eax
cmp ebp, dword [eax + 0x14]
jne 0x408d72
call fcn.0042ccd4
cmp dword [ebp + 0x3c], esi
jb 0x408d80
mov eax, dword [ebp + 0x28]
jmp 0x408d83
mov eax, dword [ebx]
jmp 0x408d68
lea eax, [ebp + 0x28]
push eax
lea edi, [esp + 0x1a8]
call fcn.00404af0
add esp, 4
mov byte [esp + 0x3f4], 1
cmp dword [0x4736bc], 0
je 0x408deb
lea esi, [esp + 0x18]
call fcn.0040fa60
add eax, 0x1c
cmp dword [eax + 0x18], 8
jb 0x408dbb
mov edi, dword [eax + 4]
jmp 0x408dbe
lea edi, [eax + 4]
lea esi, [esp + 0x18]
call fcn.0040fa60
cmp dword [eax + 0x18], 8
jb 0x408dd2
mov eax, dword [eax + 4]
jmp 0x408dd5
add eax, 4
mov edx, dword [0x4736bc]
push edi
push eax
push str.Data_reader_config:__s___s
push edx
call fcn.00408140
add esp, 0x10
mov eax, dword [esp + 0x1a8]
mov esi, 0x10
cmp dword [esp + 0x1bc], esi
jae 0x408e07
lea eax, [esp + 0x1a8]
mov ecx, dword [esp + 0x1b8]
dec ecx
push ecx
push eax
mov eax, dword [0x4736c0]
call fcn.0040ff70
mov edi, dword [esp + 0x1cc]
add esp, 8
cmp dword [esp + 0x1d8], esi
jae 0x408e35
lea edi, [esp + 0x1c4]
mov esi, dword [0x4736c0]
mov eax, 0xffffd8ee
call fcn.004101e0
cmp dword [esp + 0x1bc], 0x10
jb 0x408e5f
mov edx, dword [esp + 0x1a8]
push edx
call fcn.0042ce2b
add esp, 4
xor esi, esi
mov edi, 0xf
mov dword [esp + 0x3f4], 0xffffffff
cmp dword [esp + 0x1d8], 0x10
mov dword [esp + 0x1bc], edi
mov dword [esp + 0x1b8], esi
mov byte [esp + 0x1a8], 0
jb 0x408ea1
mov eax, dword [esp + 0x1c4]
push eax
call fcn.0042ce2b
add esp, 4
mov dword [esp + 0x1d8], edi
mov dword [esp + 0x1d4], esi
mov byte [esp + 0x1c4], 0
cmp ebx, esi
jne 0x408ed4
call fcn.0042ccd4
xor eax, eax
cmp ebp, dword [eax + 0x14]
jne 0x408ecc
call fcn.0042ccd4
mov ebp, dword [ebp]
jmp 0x408cf5
mov eax, dword [ebx]
jmp 0x408ec2
xor ebp, ebp
lea ecx, [esp + 0x180]
push ecx
call dword [sym.imp.KERNEL32.dll_GetNativeSystemInfo]
cmp word [esp + 0x180], 9
mov esi, dword [0x4736c0]
mov eax, dword [esi + 8]
mov edi, str.OS_IS_32BIT
jne 0x408f72
mov dword [eax], ebp
mov ebx, 1
mov dword [eax + 8], ebx
mov ebp, 0x10
add dword [esi + 8], ebp
mov eax, 0xffffd8ee
call fcn.004101e0
mov esi, dword [0x4736c0]
mov eax, dword [esi + 8]
mov dword [eax], ebx
mov dword [eax + 8], ebx
add dword [esi + 8], ebp
mov edi, str.OS_IS_64BIT
mov eax, 0xffffd8ee
call fcn.004101e0
mov eax, dword [0x4736bc]
xor esi, esi
cmp eax, esi
je 0x408fe0
push str.Data_reader_config:_32BIT__0
push eax
call fcn.00408140
mov edx, dword [0x4736bc]
push str.Data_reader_config:_64BIT__1
push edx
call fcn.00408140
mov eax, dword [0x4736bc]
add esp, 0x10
jmp 0x408fe0
mov ebp, 1
mov dword [eax], ebp
mov dword [eax + 8], ebp
mov ebx, 0x10
add dword [esi + 8], ebx
mov eax, 0xffffd8ee
call fcn.004101e0
mov esi, dword [0x4736c0]
mov eax, dword [esi + 8]
mov dword [eax], 0
mov dword [eax + 8], ebp
add dword [esi + 8], ebx
mov edi, str.OS_IS_64BIT
mov eax, 0xffffd8ee
call fcn.004101e0
mov eax, dword [0x4736bc]
test eax, eax
je 0x408fde
push str.Data_reader_config:_32BIT__1
push eax
call fcn.00408140
mov eax, dword [0x4736bc]
push str.Data_reader_config:_64BIT__0
push eax
call fcn.00408140
mov eax, dword [0x4736bc]
add esp, 0x10
xor esi, esi
push str.Cleanup.dat
push eax
push 0x45d9fc
lea ecx, [esp + 0x1e8]
push 0x104
push ecx
call fcn.004012b0
lea edx, [esp + 0x1f0]
add esp, 0x14
push edx
call fcn.004094c0
add esp, 4
test al, al
jne 0x409073
mov ecx, dword [0x4736bc]
lea eax, [esp + 0x1dc]
push eax
push str.ERROR:_Unable_to_properly_load_data:__s
push ecx
call fcn.00408140
mov eax, dword [0x4736bc]
add esp, 0xc
cmp byte [eax + 0xc70], 0
je 0x40904f
mov eax, dword [eax + 0xe7c]
cmp eax, esi
je 0x40904f
push eax
call dword [sym.imp.KERNEL32.dll_FlushFileBuffers]
call fcn.004120f0
mov edx, dword [0x4736c4]
push edx
mov dword [0x4736c0], esi
call fcn.0042d587
add esp, 4
mov dword [0x4736c4], esi
xor al, al
jmp 0x4090b2
push str.UpdateConfigWithProjectInfo
call fcn.004093a0
add esp, 4
test eax, eax
je 0x4090b0
mov eax, dword [0x4736bc]
push str.ERROR:_Unable_to_finish_config_initialization_from_data_file.
push eax
call fcn.00408140
mov ecx, dword [0x4736bc]
add esp, 8
call fcn.004082b0
call fcn.004120f0
mov ecx, dword [0x4736c4]
push ecx
jmp 0x40905b
mov al, 1
mov ecx, dword [esp + 0x3ec]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebp
pop ebx
mov ecx, dword [esp + 0x3d0]
xor ecx, esp
call fcn.0042c9e9
add esp, 0x3e4
ret