Function at 0x10002e9b
Capabilities:
Check if file exists
Create process on windows
Get common file path
Get http document via iwebbrowser2

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0x60c
push ebx
push esi
push edi
lea eax, [esp + 0x1f8]
mov edi, 0x104
push eax
push edi
call dword [sym.imp.KERNEL32.dll_GetTempPathA]
call fcn.10002ddd
mov esi, dword [sym.imp.USER32.dll_wsprintfA]
push eax
lea eax, [esp + 0x1fc]
push eax
lea eax, [esp + 0xf8]
push str._s_QEMU.exe
push eax
call esi
add esp, 0x10
lea eax, [esp + 0xf0]
mov dword [esp + 0x14], eax
xor ebx, ebx
lea eax, [esp + 0x14]
push eax
push ebx
push ebx
push 0x101a43f4
call dword [sym.imp.SHELL32.dll_SHGetKnownFolderPath]
push ebx
push ebx
push edi
lea eax, [esp + 0xfc]
push eax
push 0xffffffffffffffff
push dword [esp + 0x28]
push ebx
push ebx
call dword [sym.imp.KERNEL32.dll_WideCharToMultiByte]
lea eax, [esp + 0xf0]
push eax
push str._sQQWeGameAppsCF
push 0xffffffffffffffff
push edi
push eax
call fcn.10001dab
add esp, 0x14
lea eax, [esp + 0xf0]
push eax
call dword [sym.imp.SHLWAPI.dll_PathFileExistsA]
test eax, eax
jne 0x10002f5a
push str.QEMU.exe_not_found_in_the_specified_directory._n
call fcn.10001cd2
xor eax, eax
pop ecx
inc eax
jmp 0x10003270
push 0x44
pop edi
push edi
lea eax, [esp + 0xac]
push ebx
push eax
call fcn.10143750
mov dword [esp + 0xb4], edi
xor eax, eax
lea edi, [esp + 0xa4]
add esp, 0xc
stosd dword es:[edi], eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
lea eax, [esp + 0x98]
push eax
lea eax, [esp + 0xac]
push eax
push ebx
push ebx
push ebx
push ebx
push ebx
push ebx
lea eax, [esp + 0x110]
push eax
push ebx
call dword [sym.imp.KERNEL32.dll_CreateProcessA]
test eax, eax
jne 0x10002fc0
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push str.CreateProcess_failed___d_._n
call fcn.10001cd2
pop ecx
jmp 0x10002f51
call fcn.10002ddd
push eax
lea eax, [esp + 0x1fc]
push eax
lea eax, [esp + 0x308]
push str._s_s.lnk
push eax
call esi
lea eax, [esp + 0x310]
push eax
lea eax, [esp + 0x41c]
push str.__s_
push eax
call esi
add esp, 0x1c
lea eax, [esp + 0xf0]
push eax
lea eax, [esp + 0x514]
push str.::20D04FE0_3AEA_1069_A2D8_08002B30309D_s
push eax
call esi
add esp, 0xc
mov dword [esp + 0x28], 0xc08afd90
mov dword [esp + 0x2c], 0x11d1f2a1
mov dword [esp + 0x30], 0xa0005584
mov dword [esp + 0x34], 0x80381fc9
push ebx
mov dword [esp + 0x1c], 0xd30c1661
mov dword [esp + 0x20], 0x11d0cdaf
mov dword [esp + 0x24], 0xc0003e8a
mov dword [esp + 0x28], 0x6ee2c94f
mov dword [esp + 0x5c], ebx
mov dword [esp + 0x60], ebx
mov dword [esp + 0x64], ebx
mov dword [esp + 0x68], ebx
mov dword [esp + 0x10], ebx
call dword [sym.imp.ole32.dll_CoInitialize]
lea eax, [esp + 0xc]
push eax
lea eax, [esp + 0x1c]
push eax
push 4
push ebx
lea eax, [esp + 0x38]
push eax
call dword [sym.imp.ole32.dll_CoCreateInstance]
test eax, eax
js 0x10003268
mov eax, dword [esp + 0xc]
mov dword [esp + 0x48], str.Document
mov eax, dword [eax]
mov esi, dword [eax + 0x14]
call dword [sym.imp.KERNEL32.dll_GetUserDefaultLCID]
lea ecx, [esp + 0x10]
push ecx
push eax
push 1
lea eax, [esp + 0x54]
push eax
push 0x101a4454
push dword [esp + 0x20]
call esi
mov ebx, dword [sym.imp.OLEAUT32.dll_VariantClear]
test eax, eax
js 0x1000322e
lea eax, [esp + 0x38]
push eax
call ebx
mov ecx, dword [esp + 0xc]
lea edx, [esp + 0x38]
push 0
push 0
push edx
mov eax, dword [ecx]
lea edx, [esp + 0x64]
push edx
push 2
push 0x400
push 0x101a4454
push dword [esp + 0x2c]
push ecx
call dword [eax + 0x18]
test eax, eax
js 0x1000322e
mov edi, dword [esp + 0x40]
mov dword [esp + 0x4c], str.Application
mov eax, dword [edi]
mov esi, dword [eax + 0x14]
call dword [sym.imp.KERNEL32.dll_GetUserDefaultLCID]
lea ecx, [esp + 0x10]
push ecx
push eax
push 1
lea eax, [esp + 0x58]
push eax
push 0x101a4454
push edi
call esi
test eax, eax
js 0x1000322e
lea eax, [esp + 0x38]
push eax
call ebx
mov eax, dword [edi]
lea ecx, [esp + 0x38]
push 0
push 0
push ecx
lea ecx, [esp + 0x64]
push ecx
push 2
push 0x400
push 0x101a4454
push dword [esp + 0x2c]
push edi
call dword [eax + 0x18]
test eax, eax
js 0x1000322e
mov edi, dword [esp + 0x40]
mov dword [esp + 0x50], str.ShellExecute
mov eax, dword [edi]
mov esi, dword [eax + 0x14]
call dword [sym.imp.KERNEL32.dll_GetUserDefaultLCID]
lea ecx, [esp + 0x10]
push ecx
push eax
push 1
lea eax, [esp + 0x5c]
push eax
push 0x101a4454
push edi
call esi
test eax, eax
js 0x1000322e
push 8
pop eax
lea ecx, [esp + 0x408]
mov word [esp + 0x78], ax
call fcn.10002e36
mov esi, dword [sym.imp.OLEAUT32.dll_SysReAllocString]
push eax
call esi
mov dword [esp + 0x80], eax
lea ecx, [esp + 0x510]
push 8
pop eax
mov word [esp + 0x88], ax
call fcn.10002e36
push eax
call esi
xor ecx, ecx
mov dword [esp + 0x90], eax
push ecx
push ecx
mov dword [esp + 0x7c], ecx
lea eax, [esp + 0x80]
lea ecx, [esp + 0x40]
mov dword [esp + 0x70], eax
push ecx
lea ecx, [esp + 0x74]
mov dword [esp + 0x7c], 2
push ecx
push 1
push 0x400
lea eax, [esp + 0x6c]
mov dword [esp + 0x6c], 0xfffffffd
push 0x101a4454
push dword [esp + 0x2c]
mov dword [esp + 0x8c], eax
mov eax, dword [edi]
push edi
call dword [eax + 0x18]
lea eax, [esp + 0x38]
push eax
call ebx
mov eax, dword [esp + 0xc]
lea edx, [esp + 0x38]
push 0
push 0
push edx
mov ecx, dword [eax]
lea edx, [esp + 0x64]
push edx
push 1
push 0x400
push 0x101a4454
push 0x12e
push eax
call dword [ecx + 0x18]
mov eax, dword [esp + 0xc]
push eax
mov ecx, dword [eax]
call dword [ecx + 8]
call dword [sym.imp.ole32.dll_CoUninitialize]
xor eax, eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret