Function at 0x401348
Capabilities:
Check mutex and terminate process on windows
Check mutex on windows
Create process on windows
Get graphical window text
Terminate process

Disassembly:
lea ecx, [esp + 4]
and esp, 0xfffffff0
push dword [ecx - 4]
push ebp
mov ebp, esp
push edi
push esi
push ebx
push ecx
sub esp, 0xf8
call fcn.00401bc0
mov dword [esp + 8], str.GameLauncher
mov dword [esp + 4], 1
mov dword [esp], 0
call dword [sym.imp.KERNEL32.dll_CreateMutexA]
sub esp, 0xc
call dword [sym.imp.KERNEL32.dll_GetLastError]
cmp eax, 0xb7
je 0x4016f5
mov eax, dword [sym.imp.msvcrt.dll___argc]
cmp dword [eax], 1
jle 0x4016bf
mov dword [esp + 4], 0x40306c
mov eax, dword [sym.imp.msvcrt.dll___argv]
mov eax, dword [eax]
mov eax, dword [eax + 4]
mov dword [esp], eax
call sub.msvcrt.dll_fopen
test eax, eax
je 0x40172b
mov edx, dword [sym.imp.msvcrt.dll___argv]
mov edx, dword [edx]
mov edx, dword [edx + 4]
mov dword [esp], eax
mov dword [ebp - 0xc4], edx
call sub.msvcrt.dll_fclose
mov dword [ebp - 0x6c], 0x205dd75b
mov dword [ebp - 0x68], 0
lea edi, [ebp - 0x64]
xor eax, eax
mov ecx, 0x38
rep stosb byte es:[edi], al
lea ecx, [ebp - 0xb0]
mov dword [ebp - 0xcc], ecx
mov ecx, 0x44
mov edi, dword [ebp - 0xcc]
rep stosb byte es:[edi], al
mov dword [ebp - 0xb0], 0x44
lea ecx, [ebp - 0x2c]
mov dword [ebp - 0xd0], ecx
mov ecx, 0x10
mov edi, dword [ebp - 0xd0]
rep stosb byte es:[edi], al
mov dword [ebp - 0x1c], 0
mov dword [esp], str.ntdll
mov ebx, dword [sym.imp.KERNEL32.dll_GetModuleHandleA]
call ebx
push esi
mov dword [esp + 4], str.NtSuspendProcess
mov dword [esp], eax
mov esi, dword [sym.imp.KERNEL32.dll_GetProcAddress]
call esi
sub esp, 8
mov dword [ebp - 0xbc], eax
mov dword [esp], str.ntdll
call ebx
push ebx
mov dword [esp + 4], str.NtResumeProcess
mov dword [esp], eax
call esi
sub esp, 8
mov dword [ebp - 0xc0], eax
mov esi, dword [sym.imp.KERNEL32.dll_Sleep]
mov edx, dword [ebp - 0xc4]
mov ebx, edx
lea eax, [ebp - 0x2c]
mov dword [esp + 0x24], eax
lea ecx, [ebp - 0xb0]
mov dword [esp + 0x20], ecx
mov dword [esp + 0x1c], 0
mov dword [esp + 0x18], 0
mov dword [esp + 0x14], 0
mov dword [esp + 0x10], 0
mov dword [esp + 0xc], 0
mov dword [esp + 8], 0
mov dword [esp + 4], 0
mov dword [esp], ebx
call dword [sym.imp.KERNEL32.dll_CreateProcessA]
sub esp, 0x28
test eax, eax
je 0x401668
xor edi, edi
lea esi, [esi]
mov eax, dword [ebp - 0x24]
mov dword [esp], eax
call fcn.00401318
test eax, eax
jne 0x401538
mov dword [esp], 0x3e8
call esi
push ecx
inc edi
cmp edi, 0x14
jne 0x4014f4
mov eax, dword [ebp - 0x2c]
test eax, eax
je 0x401492
mov dword [esp + 4], 0
mov dword [esp], eax
call dword [sym.imp.KERNEL32.dll_TerminateProcess]
sub esp, 8
jmp 0x401492
mov ebx, eax
lea eax, [ebp - 0x6c]
mov dword [ebp - 0xd4], eax
xor eax, eax
mov ecx, 0xffffffff
mov edi, dword [ebp - 0xd4]
repne scasb al, byte es:[edi]
not ecx
dec ecx
mov edx, 0x40
sub edx, ecx
mov dword [esp + 8], edx
lea eax, [ebp - 0x6c]
lea ecx, [eax + ecx]
mov dword [esp + 4], ecx
mov dword [esp], ebx
call dword [sym.imp.USER32.dll_GetWindowTextA]
sub esp, 0xc
lea edi, [ebp - 0x1c]
jmp 0x401593
mov dword [esp], 0x3e8
call esi
push ecx
cmp dword [ebp - 0x1c], 0x103
jne 0x401699
mov dword [esp + 4], edi
mov eax, dword [ebp - 0x2c]
mov dword [esp], eax
call dword [sym.imp.KERNEL32.dll_GetExitCodeProcess]
sub esp, 8
call dword [sym.imp.USER32.dll_GetForegroundWindow]
cmp ebx, eax
je 0x40157c
cmp dword [ebp - 0x1c], 0x103
jne 0x40157c
mov dword [esp], 0xfa
call esi
push edx
mov eax, dword [ebp - 0x2c]
mov dword [esp], eax
call dword [ebp - 0xbc]
push eax
mov dword [esp + 0xc], 0x40
lea ecx, [ebp - 0x6c]
mov dword [esp + 8], ecx
mov dword [esp + 4], str.Process_suspended__press_Ok_to_resume.
mov dword [esp], 0
call dword [sym.imp.USER32.dll_MessageBoxA]
sub esp, 0x10
dec eax
jne 0x40157c
mov eax, dword [ebp - 0x2c]
mov dword [esp], eax
call dword [ebp - 0xc0]
push ecx
mov dword [esp + 4], 9
mov dword [esp], ebx
call dword [sym.imp.USER32.dll_ShowWindow]
sub esp, 8
mov dword [esp + 4], 1
mov dword [esp], ebx
call dword [sym.imp.USER32.dll_SwitchToThisWindow]
sub esp, 8
call dword [sym.imp.USER32.dll_GetForegroundWindow]
cmp ebx, eax
je 0x40157c
mov dword [esp], ebx
call dword [sym.imp.USER32.dll_IsWindow]
push edx
test eax, eax
je 0x40157c
mov dword [esp], 0x10
call esi
push eax
call dword [sym.imp.USER32.dll_GetForegroundWindow]
cmp ebx, eax
jne 0x40163d
jmp 0x40157c
mov dword [esp + 0xc], 0x35
mov dword [esp + 8], 0
mov dword [esp + 4], str.Error_launching_file.
mov dword [esp], 0
call dword [sym.imp.USER32.dll_MessageBoxA]
sub esp, 0x10
cmp eax, 2
jne 0x401513
mov eax, dword [ebp - 0x2c]
mov dword [esp], eax
mov ebx, dword [sym.imp.KERNEL32.dll_CloseHandle]
call ebx
push edx
mov eax, dword [ebp - 0x28]
mov dword [esp], eax
call ebx
push eax
xor eax, eax
lea esp, [ebp - 0x10]
pop ecx
pop ebx
pop esi
pop edi
leave
lea esp, [ecx - 4]
ret
mov dword [esp + 0xc], 0
mov dword [esp + 8], 0
mov dword [esp + 4], str.No_File_In_CMD_Line
mov dword [esp], 0
call dword [sym.imp.USER32.dll_MessageBoxA]
sub esp, 0x10
xor eax, eax
lea esp, [ebp - 0x10]
pop ecx
pop ebx
pop esi
pop edi
leave
lea esp, [ecx - 4]
ret
mov dword [esp + 0xc], 0
mov dword [esp + 8], str.GameLauncher
mov dword [esp + 4], str.Error:_Already_an_instance_running.
mov dword [esp], 0
call dword [sym.imp.USER32.dll_MessageBoxA]
sub esp, 0x10
xor eax, eax
lea esp, [ebp - 0x10]
pop ecx
pop ebx
pop esi
pop edi
leave
lea esp, [ecx - 4]
ret
mov dword [esp + 0xc], 0
mov dword [esp + 8], 0
mov dword [esp + 4], str.Launch_File_Not_Found_In_Active_Directory
mov dword [esp], 0
call dword [sym.imp.USER32.dll_MessageBoxA]
sub esp, 0x10
jmp 0x4016b1