Function at 0x40b560
Capabilities:
Check if file exists
Create process on windows
Get common file path
Get file attributes

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x478
mov eax, dword [0x412018]
xor eax, ebp
mov dword [ebp - 8], eax
mov dword [ebp - 0x218], 0
xor eax, eax
mov word [ebp - 0x210], ax
push 0x206
push 0
lea ecx, [ebp - 0x20e]
push ecx
call sub.MSVCR90.dll_memset
add esp, 0xc
xor edx, edx
mov word [ebp - 0x420], dx
push 0x206
push 0
lea eax, [ebp - 0x41e]
push eax
call sub.MSVCR90.dll_memset
add esp, 0xc
lea ecx, [ebp - 0x210]
push ecx
push 0
push 0
push 0x2b
push 0
call dword [sym.imp.SHELL32.dll_SHGetFolderPathW]
test eax, eax
jge 0x40b5ef
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push 0x40f2e4
push 2
call fcn.00406380
add esp, 0xc
jmp 0x40b86e
lea edx, [ebp - 0x210]
push edx
push 0x104
lea eax, [ebp - 0x420]
push eax
call fcn.004063a0
mov dword [ebp - 0x424], eax
cmp dword [ebp - 0x424], 0
jge 0x40b631
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push 0x40f314
push 2
call fcn.00406380
add esp, 0xc
jmp 0x40b86e
push str.AdobeARM1.0AdobeARMHelper.exe
push 0x104
lea ecx, [ebp - 0x420]
push ecx
call fcn.004063f0
mov dword [ebp - 0x424], eax
cmp dword [ebp - 0x424], 0
jge 0x40b671
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push 0x40f3a4
push 2
call fcn.00406380
add esp, 0xc
jmp 0x40b86e
lea edx, [ebp - 0x420]
push edx
call dword [sym.imp.KERNEL32.dll_GetFileAttributesW]
cmp eax, 0xffffffff
jne 0x40b6a5
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
lea eax, [ebp - 0x420]
push eax
push str.unable_to_find:
push 2
call fcn.00408b70
add esp, 0x10
jmp 0x40b86e
push 0
push 0x80
push 3
push 0
push 1
push SysReAllocString
lea ecx, [ebp - 0x420]
push ecx
call dword [sym.imp.KERNEL32.dll_CreateFileW]
mov dword [ebp - 4], eax
call dword [sym.imp.KERNEL32.dll_GetLastError]
mov dword [ebp - 0x218], eax
mov edx, dword [ebp - 4]
sub edx, 0xffffffff
neg edx
sbb edx, edx
and edx, dword [ebp - 4]
push edx
lea ecx, [ebp - 0x214]
call fcn.00401730
cmp dword [ebp - 0x214], 0
je 0x40b81d
push 0
push 0xffffffffffffffff
lea eax, [ebp - 0x420]
push eax
call fcn.0040af30
add esp, 0xc
mov dword [ebp - 0x464], eax
cmp dword [ebp - 0x464], 0
je 0x40b754
mov ecx, dword [ebp - 0x464]
push ecx
lea edx, [ebp - 0x420]
push edx
push 0x40f3ec
push 2
call fcn.00408b70
add esp, 0x10
mov dword [ebp - 0x468], eax
lea ecx, [ebp - 0x214]
call fcn.00401750
mov eax, dword [ebp - 0x468]
jmp 0x40b86e
mov dword [ebp - 0x460], 0
push 0x38
push 0
lea eax, [ebp - 0x45c]
push eax
call sub.MSVCR90.dll_memset
add esp, 0xc
mov dword [ebp - 0x460], 0x3c
mov dword [ebp - 0x45c], 0x540
mov dword [ebp - 0x444], 5
mov dword [ebp - 0x44c], str._ArmCleanup
lea ecx, [ebp - 0x420]
mov dword [ebp - 0x450], ecx
lea edx, [ebp - 0x460]
push edx
call dword [sym.imp.SHELL32.dll_ShellExecuteExW]
test eax, eax
je 0x40b7ec
push 0
lea eax, [ebp - 0x420]
push eax
push str.launch_succeeded
push 2
call fcn.00408b70
add esp, 0x10
mov dword [ebp - 0x46c], eax
lea ecx, [ebp - 0x214]
call fcn.00401750
mov eax, dword [ebp - 0x46c]
jmp 0x40b86e
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push str.launch_failed:
push 2
call fcn.00406380
add esp, 0xc
mov dword [ebp - 0x470], eax
lea ecx, [ebp - 0x214]
call fcn.00401750
mov eax, dword [ebp - 0x470]
jmp 0x40b86e
mov ecx, dword [ebp - 0x218]
push ecx
lea edx, [ebp - 0x420]
push edx
push str.unable_to_lock_for_validation:
push 2
call fcn.00408b70
add esp, 0x10
mov dword [ebp - 0x474], eax
lea ecx, [ebp - 0x214]
call fcn.00401750
mov eax, dword [ebp - 0x474]
jmp 0x40b86e
mov ecx, dword [ebp - 8]
xor ecx, ebp
call fcn.004076b8
mov esp, ebp
pop ebp
ret