Function at 0x4087ca
Capabilities:
Check if file exists
Copy file
Delete directory
Delete file
Get common file path
Get file attributes

Disassembly:
push 0x458
mov eax, 0x43527c
call fcn.0041aab0
mov esi, dword [ebp + 8]
lea ecx, [ebp - 0x424]
mov dword [ebp - 0x460], esi
call fcn.00401359
and dword [ebp - 4], 0
xor ebx, ebx
call fcn.0040bda9
push eax
lea ecx, [ebp - 0x450]
call fcn.00401320
mov byte [ebp - 4], 1
call fcn.0040bda9
push eax
lea ecx, [ebp - 0x44c]
call fcn.00401320
mov byte [ebp - 4], 2
call fcn.0040bda9
push eax
lea ecx, [ebp - 0x448]
call fcn.00401320
mov byte [ebp - 4], 3
call fcn.0040bda9
push eax
lea ecx, [ebp - 0x444]
call fcn.00401320
lea ecx, [ebp - 0x45c]
mov byte [ebp - 4], 4
call fcn.00409b80
push esi
lea ecx, [ebp - 0x458]
mov byte [ebp - 4], 5
call fcn.004021f9
lea eax, [ebp - 0x44c]
push eax
lea ecx, [ebp - 0x45c]
call fcn.00409c9a
lea eax, [ebp - 0x450]
push eax
lea ecx, [ebp - 0x45c]
call fcn.00409be2
mov eax, dword [ebp - 0x450]
cmp dword [eax - 0xc], ebx
jne 0x4088cf
push str.empty_arm_update_folder
lea ecx, [ebp - 0x434]
call fcn.004020dd
push ebx
lea eax, [ebp - 0x434]
mov byte [ebp - 4], 6
push eax
push 2
call fcn.00403273
mov ecx, dword [ebp - 0x434]
add esp, 0xc
lea ecx, [ecx - 0x10]
call fcn.00401a54
mov ebx, 0x371
jmp 0x409249
push 0x438050
push dword [ebp - 0x44c]
call fcn.0041fc2e
pop ecx
pop ecx
test eax, eax
jne 0x4091a8
push 0x437078
lea eax, [ebp - 0x450]
push eax
lea eax, [ebp - 0x428]
push eax
call fcn.0040229e
push 0x449820
push eax
lea eax, [ebp - 0x43c]
mov byte [ebp - 4], 7
push eax
call fcn.00402249
add esp, 0x18
mov ecx, dword [ebp - 0x428]
mov byte [ebp - 4], 9
lea ecx, [ecx - 0x10]
call fcn.00401a54
mov eax, dword [ebp - 0x43c]
add eax, 0xfffffff0
push eax
call fcn.00402448
lea edi, [eax + 0x10]
mov dword [ebp - 0x464], edi
lea ecx, [ebp - 0x434]
mov byte [ebp - 4], 0xa
mov dword [esp], str.self_update_type_is_msi:
call fcn.004020dd
push 0
lea eax, [ebp - 0x43c]
mov byte [ebp - 4], 0xb
push eax
lea eax, [ebp - 0x434]
push eax
push 2
call fcn.00402b31
mov ecx, dword [ebp - 0x434]
add esp, 0x10
mov byte [ebp - 4], 0xa
lea ecx, [ecx - 0x10]
call fcn.00401a54
push dword [ebp - 0x43c]
call dword [sym.imp.KERNEL32.dll_GetFileAttributesW]
cmp eax, 0xffffffff
je 0x409116
xor ebx, ebx
call fcn.0040bda9
push eax
lea ecx, [ebp - 0x440]
call fcn.00401320
push ebx
push 0x80
push 3
push ebx
push 1
push 0x80000000
push dword [ebp - 0x43c]
call dword [sym.imp.KERNEL32.dll_CreateFileW]
mov dword [ebp - method.AutoHandle.virtual_0], vtable.AutoHandle.0
mov dword [ebp - 0x428], eax
mov byte [ebp - 4], 0xd
test eax, eax
je 0x4090cb
cmp eax, 0xffffffff
je 0x4090cb
push str.2_16_17_18_19_52_53_54_63_68_81_82_83_84_85_86_87_88_89_90_91_92_93_97
push eax
push dword [ebp - 0x43c]
call fcn.0040af9b
add esp, 0xc
test eax, eax
je 0x4090b4
and dword [ebp - 0x438], ebx
lea eax, [ebp - 0x438]
push eax
push ebx
push dword [ebp - 0x43c]
mov byte [ebp - 4], 0xe
call sub.msi.dll_MsiOpenProductW
test eax, eax
jne 0x40907f
push str.ProductCode
lea ecx, [ebp - 0x434]
call fcn.004020dd
lea eax, [ebp - 0x440]
mov byte [ebp - 4], 0xf
push eax
lea eax, [ebp - 0x434]
push eax
push dword [ebp - 0x438]
call fcn.00405b46
mov ecx, dword [ebp - 0x434]
add esp, 0xc
mov esi, eax
lea ecx, [ecx - 0x10]
call fcn.00401a54
push dword [ebp - 0x438]
call sub.msi.dll_MsiConfigureFeatureFromDescriptorA
cmp dword [ebp - 0x438], ebx
je 0x408a92
push dword [ebp - 0x438]
call sub.msi.dll_MsiConfigureFeatureFromDescriptorA
lea ecx, [ebp - 0x42c]
mov byte [ebp - 4], 0xc
call fcn.00403fb5
test esi, esi
jne 0x408b80
mov eax, dword [ebp - 0x440]
cmp dword [eax - 0xc], esi
je 0x408b80
call fcn.0040bda9
push eax
lea ecx, [ebp - 0x438]
call fcn.00401320
mov byte [ebp - 4], 0x10
test ebx, ebx
jne 0x408b78
push 0x104
lea ecx, [ebp - 0x438]
call fcn.00403333
push eax
push esi
push ebx
push str.A6EADE66_0804_0000_1959_000000000000
call sub.msi.dll_MsiSourceListClearAllW
push 0xffffffffffffffff
lea ecx, [ebp - 0x438]
mov dword [ebp - 0x434], eax
call fcn.004033b5
mov eax, dword [ebp - 0x434]
test eax, eax
jne 0x408b6f
lea eax, [ebp - 0x440]
push eax
lea eax, [ebp - 0x438]
push eax
call fcn.00404051
pop ecx
pop ecx
test al, al
je 0x408b69
push str.found_already_installed_Product:
lea ecx, [ebp - 0x428]
inc ebx
call fcn.004020dd
push 0
lea eax, [ebp - 0x438]
mov byte [ebp - 4], 0x11
push eax
lea eax, [ebp - 0x428]
push eax
push 1
call fcn.00402b31
mov ecx, dword [ebp - 0x428]
add esp, 0x10
mov byte [ebp - 4], 0x10
lea ecx, [ecx - 0x10]
call fcn.00401a54
mov eax, dword [ebp - 0x434]
inc esi
test eax, eax
je 0x408acd
mov ecx, dword [ebp - 0x438]
jmp 0x408bad
push str.failed_to_get_ProductCode
lea ecx, [ebp - 0x428]
call fcn.004020dd
push 0
lea eax, [ebp - 0x428]
mov byte [ebp - 4], 0x12
push eax
push 2
call fcn.00403273
mov ecx, dword [ebp - 0x428]
add esp, 0xc
lea ecx, [ecx - 0x10]
mov byte [ebp - 4], 0xc
call fcn.00401a54
lea ecx, [ebp - 0x45c]
call fcn.004070bf
neg eax
push 0
sbb eax, eax
and eax, 0x21
add eax, 2
push eax
call sub.msi.dll_MsiSetPropertyW
test ebx, ebx
je 0x408ca4
push 4
push dword [ebp - 0x440]
call sub.msi.dll_MsiSetComponentStateW
mov ebx, eax
test ebx, ebx
je 0x408d69
cmp ebx, 0xbc2
je 0x408d69
push str.failed_to_reinstall__will_uninstall_Product:
lea ecx, [ebp - 0x428]
call fcn.004020dd
push ebx
lea eax, [ebp - 0x440]
mov byte [ebp - 4], 0x14
push eax
lea eax, [ebp - 0x428]
push eax
push 1
call fcn.00402b31
mov ecx, dword [ebp - 0x428]
add esp, 0x10
mov byte [ebp - 4], 0xc
lea ecx, [ecx - 0x10]
call fcn.00401a54
push 2
push 1
push dword [ebp - 0x440]
call sub.msi.dll_MsiDatabaseCommit
mov esi, eax
test esi, esi
je 0x408d3e
cmp esi, 0xbc2
je 0x408d3e
push str.failed_to_uninstall_Product:
lea ecx, [ebp - 0x428]
call fcn.004020dd
push esi
lea eax, [ebp - 0x440]
mov byte [ebp - 4], 0x16
push eax
lea eax, [ebp - 0x428]
push eax
push 1
call fcn.00402b31
mov ecx, dword [ebp - 0x428]
add esp, 0x10
mov byte [ebp - 4], 0xc
lea ecx, [ecx - 0x10]
call fcn.00401a54
lea eax, [ebp - 0x43c]
push eax
lea eax, [ebp - 0x440]
push eax
call fcn.00404ae4
mov ebx, eax
pop ecx
pop ecx
test ebx, ebx
jne 0x4090f5
lea eax, [ebp - 0x448]
push eax
call fcn.004056a3
pop ecx
test eax, eax
je 0x408cf8
lea eax, [ebp - 0x444]
push eax
lea eax, [ebp - 0x448]
push eax
call fcn.004042b9
pop ecx
pop ecx
test eax, eax
je 0x408cf8
lea ecx, [ebp - 0x444]
call fcn.004025a7
push 0x436f68
push dword [ebp - 0x43c]
call sub.msi.dll_MsiOpenDatabaseW
mov ebx, eax
test ebx, ebx
je 0x408df0
cmp ebx, 0xbc2
jne 0x408d99
push str.msi_self_update_returned_REBOOT
lea ecx, [ebp - 0x428]
call fcn.004020dd
push 0
lea eax, [ebp - 0x428]
mov byte [ebp - 4], 0x17
push eax
push 1
jmp 0x408e0f
push str.successfully_uninstalled_Product:
lea ecx, [ebp - 0x428]
call fcn.004020dd
push 0
lea eax, [ebp - 0x440]
mov byte [ebp - 4], 0x15
push eax
lea eax, [ebp - 0x428]
push eax
push 2
jmp 0x408c8a
push str.successfully_reinstalled_Product:
lea ecx, [ebp - 0x428]
call fcn.004020dd
push 0
lea eax, [ebp - 0x440]
mov byte [ebp - 4], 0x13
push eax
lea eax, [ebp - 0x428]
push eax
push 2
call fcn.00402b31
add esp, 0x10
jmp 0x408e17
push 0x436f68
lea ecx, [ebp - 0x434]
call fcn.004020dd
push str.msi_self_update_failed
lea ecx, [ebp - 0x428]
mov byte [ebp - 4], 0x18
call fcn.004020dd
push ebx
lea eax, [ebp - 0x434]
mov byte [ebp - 4], 0x19
push eax
lea eax, [ebp - 0x428]
push eax
push 1
call fcn.00402b31
mov ecx, dword [ebp - 0x428]
add esp, 0x10
lea ecx, [ecx - 0x10]
call fcn.00401a54
mov ecx, dword [ebp - 0x434]
jmp 0x408e1d
push str.msi_self_update_succeeded
lea ecx, [ebp - 0x428]
call fcn.004020dd
push 0
lea eax, [ebp - 0x428]
mov byte [ebp - 4], 0x1a
push eax
push 2
call fcn.00403273
add esp, 0xc
mov ecx, dword [ebp - 0x428]
lea ecx, [ecx - 0x10]
mov byte [ebp - 4], 0xc
call fcn.00401a54
lea eax, [ebp - 0x42d]
mov byte [ebp - 0x42d], 0
push eax
push ebx
push str.Self_Update_MSI_Result
lea ecx, [ebp - 0x424]
call fcn.00401bcc
push dword [ebp - 0x444]
call dword [sym.imp.KERNEL32.dll_GetFileAttributesW]
cmp eax, 0xffffffff
je 0x408f2d
mov esi, dword [ebp - 0x448]
cmp dword [esi - 0xc], 0
je 0x408ee2
push esi
call dword [sym.imp.KERNEL32.dll_GetFileAttributesW]
cmp eax, 0xffffffff
jne 0x408ee2
push str.AdobeARM.exe_is_missing_after_install__will_use_backup
lea ecx, [ebp - 0x428]
call fcn.004020dd
push 0
lea eax, [ebp - 0x428]
mov byte [ebp - 4], 0x1b
push eax
push 1
call fcn.00403273
mov ecx, dword [ebp - 0x428]
add esp, 0xc
mov byte [ebp - 4], 0xc
lea ecx, [ecx - 0x10]
call fcn.00401a54
lea eax, [ebp - 0x42d]
mov byte [ebp - 0x42d], 0
push eax
push 0
push 0x437f1c
push str.Self_Update_MSI_Missing_ARM
lea ecx, [ebp - 0x424]
call fcn.00401a7a
push 0
push esi
push dword [ebp - 0x444]
call dword [sym.imp.KERNEL32.dll_CopyFileW]
push dword [ebp - 0x444]
call dword [sym.imp.KERNEL32.dll_DeleteFileW]
push 0
push str.AdobeARM.exe
lea ecx, [ebp - 0x444]
call fcn.004025e8
cmp eax, 0xffffffff
je 0x408f2d
push eax
lea eax, [ebp - 0x428]
push eax
lea ecx, [ebp - 0x444]
call fcn.00402a80
mov esi, dword [ebp - 0x428]
push esi
call dword [sym.imp.KERNEL32.dll_RemoveDirectoryW]
lea ecx, [esi - 0x10]
call fcn.00401a54
call fcn.004046d2
test ebx, ebx
je 0x408f42
cmp ebx, 0xbc2
jne 0x409066
push 0x104
lea eax, [ebp - 0x218]
push 0
push eax
call fcn.0041bfd0
add esp, 0xc
lea eax, [ebp - 0x218]
push eax
xor eax, eax
push eax
push eax
push 0x23
push eax
call dword [sym.imp.SHELL32.dll_SHGetFolderPathW]
test eax, eax
js 0x409066
lea eax, [ebp - 0x218]
push eax
lea ecx, [ebp - 0x438]
call fcn.004020dd
mov esi, str.AdobeARMS
mov byte [ebp - 4], 0x1c
push esi
call fcn.0041fc6e
pop ecx
push eax
push esi
lea ecx, [ebp - 0x438]
call fcn.00402366
call fcn.0040755b
test eax, eax
je 0x409034
call fcn.004074b4
test eax, eax
je 0x409034
push 1
push dword [ebp - 0x438]
push str.tFolders
push dword [0x449840]
push 0x80000002
call fcn.004086c3
add esp, 0x14
lea ecx, [ebp - 0x434]
push str._ArmCleanup
call fcn.004020dd
push 0x436f68
lea ecx, [ebp - 0x428]
mov byte [ebp - 4], 0x1d
call fcn.004020dd
lea eax, [ebp - 0x434]
mov byte [ebp - 4], 0x1e
push eax
lea eax, [ebp - 0x428]
push eax
call fcn.004077cf
pop ecx
pop ecx
mov ecx, dword [ebp - 0x428]
lea ecx, [ecx - 0x10]
call fcn.00401a54
mov ecx, dword [ebp - 0x434]
lea ecx, [ecx - 0x10]
call fcn.00401a54
jmp 0x409058
push ecx
mov esi, esp
mov dword [ebp - 0x428], esi
mov eax, dword [ebp - 0x438]
add eax, 0xfffffff0
push eax
call fcn.00402448
add eax, 0x10
pop ecx
mov dword [esi], eax
call fcn.00407644
pop ecx
mov ecx, dword [ebp - 0x438]
lea ecx, [ecx - 0x10]
call fcn.00401a54
mov ecx, dword [ebp - 0x440]
lea ecx, [ecx - 0x10]
call fcn.00401a54
mov esi, dword [ebp - 0x460]
jmp 0x409198
push 0x3ee
push str.Self_Update_Init_Error
push dword [ebp - 0x43c]
push str.failed_to_open_db:
call fcn.00407ae6
add esp, 0x10
mov ebx, eax
cmp dword [ebp - 0x438], 0
je 0x4090ea
push dword [ebp - 0x438]
call sub.msi.dll_MsiConfigureFeatureFromDescriptorA
jmp 0x4090ea
push 0x3ee
push str.Self_Update_Init_Error
push dword [ebp - 0x43c]
push str.file_not_valid:
jmp 0x4090e0
push 0x3ee
push str.Self_Update_Init_Error
push dword [ebp - 0x43c]
push str.failed_to_lock_for_validation:
call fcn.00407ae6
mov ebx, eax
add esp, 0x10
lea ecx, [ebp - 0x42c]
call fcn.00403fb5
mov ecx, dword [ebp - 0x440]
lea ecx, [ecx - 0x10]
call fcn.00401a54
lea ecx, [edi - 0x10]
call fcn.00401a54
mov ecx, dword [ebp - 0x43c]
jmp 0x409241
push 0x436f68
lea ecx, [ebp - 0x434]
call fcn.004020dd
push str.msi_self_update_file_not_found
lea ecx, [ebp - 0x428]
mov byte [ebp - 4], 0x1f
call fcn.004020dd
push 2
lea eax, [ebp - 0x434]
mov byte [ebp - 4], 0x20
push eax
lea eax, [ebp - 0x428]
push eax
push 1
call fcn.00402b31
mov ecx, dword [ebp - 0x428]
add esp, 0x10
lea ecx, [ecx - 0x10]
call fcn.00401a54
mov ecx, dword [ebp - 0x434]
mov byte [ebp - 4], 0xa
lea ecx, [ecx - 0x10]
call fcn.00401a54
lea eax, [ebp - 0x42d]
mov byte [ebp - 0x42d], 0
push eax
push 2
push str.Self_Update_MSI_Result
lea ecx, [ebp - 0x424]
call fcn.00401bcc
lea ecx, [edi - 0x10]
call fcn.00401a54
mov ecx, dword [ebp - 0x43c]
jmp 0x4091dc
push str.unknown_or_not_supported_self_update_type:
lea ecx, [ebp - 0x428]
call fcn.004020dd
push 0
lea eax, [ebp - 0x44c]
mov byte [ebp - 4], 0x21
push eax
lea eax, [ebp - 0x428]
push eax
push 1
call fcn.00402b31
mov ecx, dword [ebp - 0x428]
add esp, 0x10
lea ecx, [ecx - 0x10]
mov byte [ebp - 4], 5
call fcn.00401a54
call fcn.0040bda9
push eax
lea ecx, [ebp - 0x454]
call fcn.00401320
lea eax, [ebp - 0x454]
mov byte [ebp - 4], 0x22
push eax
lea ecx, [ebp - 0x45c]
call fcn.00409ea0
lea eax, [ebp - 0x454]
push 0x449824
push eax
call fcn.00404051
pop ecx
pop ecx
test al, al
je 0x40923b
mov edi, str._BackFromArmUpdate
push edi
call fcn.0041fc6e
pop ecx
push eax
push edi
mov ecx, esi
call fcn.0040360e
mov ecx, dword [ebp - 0x454]
lea ecx, [ecx - 0x10]
call fcn.00401a54
lea ecx, [ebp - 0x45c]
call fcn.00409ba3
mov ecx, dword [ebp - 0x444]
lea ecx, [ecx - 0x10]
call fcn.00401a54
mov ecx, dword [ebp - 0x448]
lea ecx, [ecx - 0x10]
call fcn.00401a54
mov ecx, dword [ebp - 0x44c]
add ecx, 0xfffffff0
call fcn.00401a54
mov ecx, dword [ebp - 0x450]
add ecx, 0xfffffff0
call fcn.00401a54
lea ecx, [ebp - 0x424]
call fcn.004014b0
mov eax, ebx
call fcn.0041aa5a
ret