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

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x88c
mov eax, dword [0x412018]
xor eax, ebp
mov dword [ebp - 0x10], eax
xor eax, eax
mov word [ebp - 0x218], ax
push 0x206
push 0
lea ecx, [ebp - 0x216]
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
xor ecx, ecx
mov word [ebp - 0x848], cx
push 0x206
push 0
lea edx, [ebp - 0x846]
push edx
call sub.MSVCR90.dll_memset
add esp, 0xc
xor eax, eax
mov word [ebp - 0x640], ax
push 0x206
push 0
lea ecx, [ebp - 0x63e]
push ecx
call sub.MSVCR90.dll_memset
add esp, 0xc
lea edx, [ebp - 0x218]
push edx
push 0
push 0
push 0x2b
push 0
call dword [sym.imp.SHELL32.dll_SHGetFolderPathW]
mov dword [ebp - 0x84c], eax
cmp dword [ebp - 0x84c], 0
jge 0x40afa3
push 0
mov eax, dword [ebp - 0x84c]
push eax
push 0x40f274
push str.SHGetFolderPath_failed
call fcn.0040ad80
add esp, 0x10
jmp 0x40b40e
lea ecx, [ebp - 0x218]
push ecx
push 0x104
lea edx, [ebp - 0x848]
push edx
call fcn.004063a0
mov dword [ebp - 0x84c], eax
cmp dword [ebp - 0x84c], 0
jge 0x40afea
push 0
mov eax, dword [ebp - 0x84c]
push eax
push 0x40f2a8
push 0x40f2ac
call fcn.0040ad80
add esp, 0x10
jmp 0x40b40e
push str.AdobeARM1.0AdobeARM.exe
push 0x104
lea ecx, [ebp - 0x848]
push ecx
call fcn.004063f0
mov dword [ebp - 0x84c], eax
cmp dword [ebp - 0x84c], 0
jge 0x40b02f
push 0
mov edx, dword [ebp - 0x84c]
push edx
push 0x40f30c
push 0x40f310
call fcn.0040ad80
add esp, 0x10
jmp 0x40b40e
lea eax, [ebp - 0x848]
push eax
call dword [sym.imp.KERNEL32.dll_GetFileAttributesW]
cmp eax, 0xffffffff
jne 0x40b05e
push 0
push 2
lea ecx, [ebp - 0x848]
push ecx
push str.Unable_to_find
call fcn.0040ad80
add esp, 0x10
jmp 0x40b40e
lea edx, [ebp - 0x420]
push edx
push 0x104
call dword [sym.imp.KERNEL32.dll_GetTempPathW]
test eax, eax
jne 0x40b094
push 0
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push 0x40f358
push str.GetTempPath_failed
call fcn.0040ad80
add esp, 0x10
jmp 0x40b40e
lea eax, [ebp - 0x420]
push eax
push 0x104
lea ecx, [ebp - 0x640]
push ecx
call fcn.004063a0
mov dword [ebp - 0x84c], eax
cmp dword [ebp - 0x84c], 0
jge 0x40b0db
push 0
mov edx, dword [ebp - 0x84c]
push edx
push 0x40f384
push str.StringCbCopy_failed
call fcn.0040ad80
add esp, 0x10
jmp 0x40b40e
lea eax, [ebp - 0x640]
push eax
call fcn.0040ab40
add esp, 4
mov dword [ebp - 0x84c], eax
cmp dword [ebp - 0x84c], 0
jge 0x40b119
push 0
mov ecx, dword [ebp - 0x84c]
push ecx
push 0x40f3b0
push str.AddRandomFileName_failed
call fcn.0040ad80
add esp, 0x10
jmp 0x40b40e
mov dword [ebp - 0x430], 0xc
mov dword [ebp - 0x428], 0
mov dword [ebp - 0xc], str.D:P_A_OICI_GA___BA__A_OICI_GA___SY_
push 0
lea edx, [ebp - 0x42c]
push edx
push 1
mov eax, dword [ebp - 0xc]
push eax
call sub.ADVAPI32.dll_ConvertStringSecurityDescriptorToSecurityDescriptorW
test eax, eax
jne 0x40b16c
push 0
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push 0x40f430
push str.ConvertStringSecurityDescriptorToSecurityDescriptor_failed
call fcn.0040ad80
add esp, 0x10
jmp 0x40b40e
lea ecx, [ebp - 0x430]
push ecx
lea edx, [ebp - 0x640]
push edx
call dword [sym.imp.KERNEL32.dll_CreateDirectoryW]
test eax, eax
jne 0x40b1a6
push 0
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
lea eax, [ebp - 0x848]
push eax
push str.CreateDirectory_failed:
call fcn.0040ad80
add esp, 0x10
jmp 0x40b40e
push str.AdobeARM.exe
push 0x104
lea ecx, [ebp - 0x640]
push ecx
call fcn.004063f0
mov dword [ebp - 0x84c], eax
cmp dword [ebp - 0x84c], 0
jge 0x40b1eb
push 0
mov edx, dword [ebp - 0x84c]
push edx
push 0x40f500
push str.StringCchCat_failed
call fcn.0040ad80
add esp, 0x10
jmp 0x40b40e
push 0
push 0x80
push 3
push 0
push 1
push SysReAllocString
lea eax, [ebp - 0x848]
push eax
call dword [sym.imp.KERNEL32.dll_CreateFileW]
mov dword [ebp - 8], eax
cmp dword [ebp - 8], 0xffffffff
jne 0x40b235
push 0
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
lea ecx, [ebp - 0x848]
push ecx
push str.Unable_to_open
call fcn.0040ad80
add esp, 0x10
jmp 0x40b40e
push 1
lea edx, [ebp - 0x640]
push edx
mov eax, dword [ebp - 8]
push eax
call fcn.00409ac0
add esp, 0xc
mov dword [ebp - 0x850], eax
mov ecx, dword [ebp - 8]
push ecx
call dword [sym.imp.KERNEL32.dll_CloseHandle]
cmp dword [ebp - 0x850], 0
je 0x40b285
push 0
mov edx, dword [ebp - 0x850]
push edx
lea eax, [ebp - 0x640]
push eax
push str.Unable_to_copy
call fcn.0040ad80
add esp, 0x10
jmp 0x40b40e
push 0
push 0x80
push 3
push 0
push 1
push SysReAllocString
lea ecx, [ebp - 0x640]
push ecx
call dword [sym.imp.KERNEL32.dll_CreateFileW]
mov dword [ebp - 4], eax
call dword [sym.imp.KERNEL32.dll_GetLastError]
mov dword [ebp - 0x434], eax
mov edx, dword [ebp - 4]
sub edx, 0xffffffff
neg edx
sbb edx, edx
and edx, dword [ebp - 4]
push edx
lea ecx, [ebp - 0x424]
call fcn.00401730
cmp dword [ebp - 0x424], 0
je 0x40b3e6
mov eax, dword [ebp - 4]
push eax
lea ecx, [ebp - 0x640]
push ecx
call fcn.0040ac60
add esp, 8
test eax, eax
jne 0x40b333
lea ecx, [ebp - 0x424]
call fcn.00401770
lea edx, [ebp - 0x640]
push edx
call dword [sym.imp.KERNEL32.dll_DeleteFileW]
push 0
push 0x357
lea eax, [ebp - 0x640]
push eax
push str.file_not_valid:
call fcn.0040ad80
add esp, 0x10
lea ecx, [ebp - 0x424]
call fcn.00401750
jmp 0x40b40e
mov dword [ebp - 0x88c], 0
push 0x38
push 0
lea ecx, [ebp - 0x888]
push ecx
call sub.MSVCR90.dll_memset
add esp, 0xc
mov dword [ebp - 0x88c], 0x3c
mov dword [ebp - 0x888], 0x540
mov dword [ebp - 0x870], 5
mov dword [ebp - 0x878], str._UninstallARM
lea edx, [ebp - 0x640]
mov dword [ebp - 0x87c], edx
lea eax, [ebp - 0x88c]
push eax
call dword [sym.imp.SHELL32.dll_ShellExecuteExW]
test eax, eax
je 0x40b3af
push 0
push 0
lea ecx, [ebp - 0x640]
push ecx
push str.ShellExecuteEx_succeeded
call fcn.0040ad80
add esp, 0x10
jmp 0x40b3e4
lea ecx, [ebp - 0x424]
call fcn.00401770
lea edx, [ebp - 0x640]
push edx
call dword [sym.imp.KERNEL32.dll_DeleteFileW]
push 0
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
lea eax, [ebp - 0x640]
push eax
push str.ShellExecuteEx_failed
call fcn.0040ad80
add esp, 0x10
jmp 0x40b403
push 0
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
lea ecx, [ebp - 0x640]
push ecx
push str.failed_to_lock
call fcn.0040ad80
add esp, 0x10
lea ecx, [ebp - 0x424]
call fcn.00401750
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.00407668
mov esp, ebp
pop ebp
ret