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

Disassembly:
push 0x458
mov eax, 0x43523c
call fcn.0041aa70
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.0040bd69
push eax
lea ecx, [ebp - 0x450]
call fcn.00401320
mov byte [ebp - 4], 1
call fcn.0040bd69
push eax
lea ecx, [ebp - 0x44c]
call fcn.00401320
mov byte [ebp - 4], 2
call fcn.0040bd69
push eax
lea ecx, [ebp - 0x448]
call fcn.00401320
mov byte [ebp - 4], 3
call fcn.0040bd69
push eax
lea ecx, [ebp - 0x444]
call fcn.00401320
lea ecx, [ebp - 0x45c]
mov byte [ebp - 4], 4
call fcn.00409b40
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.00409c5a
lea eax, [ebp - 0x450]
push eax
lea ecx, [ebp - 0x45c]
call fcn.00409ba2
mov eax, dword [ebp - 0x450]
cmp dword [eax - 0xc], ebx
jne 0x4088ad
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.00403231
mov ecx, dword [ebp - 0x434]
add esp, 0xc
lea ecx, [ecx - 0x10]
call fcn.00401a54
mov ebx, 0x371
jmp 0x409213
push 0x438050
push dword [ebp - 0x44c]
call fcn.0041fbee
pop ecx
pop ecx
test eax, eax
jne 0x409172
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.00402aef
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 0x4090e0
xor ebx, ebx
call fcn.0040bd69
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 0x409095
cmp eax, 0xffffffff
je 0x409095
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.0040af5b
add esp, 0xc
test eax, eax
je 0x40907e
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 0x409049
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.00405b26
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 0x408a70
push dword [ebp - 0x438]
call sub.msi.dll_MsiConfigureFeatureFromDescriptorA
lea ecx, [ebp - 0x42c]
mov byte [ebp - 4], 0xc
call fcn.00403f95
test esi, esi
jne 0x408b5e
mov eax, dword [ebp - 0x440]
cmp dword [eax - 0xc], esi
je 0x408b5e
call fcn.0040bd69
push eax
lea ecx, [ebp - 0x438]
call fcn.00401320
mov byte [ebp - 4], 0x10
test ebx, ebx
jne 0x408b56
push 0x104
lea ecx, [ebp - 0x438]
call fcn.0040331e
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.004033a0
mov eax, dword [ebp - 0x434]
test eax, eax
jne 0x408b4d
lea eax, [ebp - 0x440]
push eax
lea eax, [ebp - 0x438]
push eax
call fcn.00404031
pop ecx
pop ecx
test al, al
je 0x408b47
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.00402aef
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 0x408aab
mov ecx, dword [ebp - 0x438]
jmp 0x408b8b
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.00403231
mov ecx, dword [ebp - 0x428]
add esp, 0xc
lea ecx, [ecx - 0x10]
mov byte [ebp - 4], 0xc
call fcn.00401a54
push 0
push 2
call sub.msi.dll_MsiSetPropertyW
test ebx, ebx
je 0x408c6e
push 4
push dword [ebp - 0x440]
call sub.msi.dll_MsiSetComponentStateW
mov ebx, eax
test ebx, ebx
je 0x408d33
cmp ebx, 0xbc2
je 0x408d33
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.00402aef
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 0x408d08
cmp esi, 0xbc2
je 0x408d08
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.00402aef
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.00404ac4
mov ebx, eax
pop ecx
pop ecx
test ebx, ebx
jne 0x4090bf
lea eax, [ebp - 0x448]
push eax
call fcn.00405683
pop ecx
test eax, eax
je 0x408cc2
lea eax, [ebp - 0x444]
push eax
lea eax, [ebp - 0x448]
push eax
call fcn.00404299
pop ecx
pop ecx
test eax, eax
je 0x408cc2
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 0x408dba
cmp ebx, 0xbc2
jne 0x408d63
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 0x408dd9
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 0x408c54
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.00402aef
add esp, 0x10
jmp 0x408de1
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.00402aef
mov ecx, dword [ebp - 0x428]
add esp, 0x10
lea ecx, [ecx - 0x10]
call fcn.00401a54
mov ecx, dword [ebp - 0x434]
jmp 0x408de7
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.00403231
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 0x408ef7
mov esi, dword [ebp - 0x448]
cmp dword [esi - 0xc], 0
je 0x408eac
push esi
call dword [sym.imp.KERNEL32.dll_GetFileAttributesW]
cmp eax, 0xffffffff
jne 0x408eac
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.00403231
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 0x408ef7
push eax
lea eax, [ebp - 0x428]
push eax
lea ecx, [ebp - 0x444]
call fcn.00402a3e
mov esi, dword [ebp - 0x428]
push esi
call dword [sym.imp.KERNEL32.dll_RemoveDirectoryW]
lea ecx, [esi - 0x10]
call fcn.00401a54
call fcn.004046b2
test ebx, ebx
je 0x408f0c
cmp ebx, 0xbc2
jne 0x409030
push 0x104
lea eax, [ebp - 0x218]
push 0
push eax
call fcn.0041bf90
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 0x409030
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.0041fc2e
pop ecx
push eax
push esi
lea ecx, [ebp - 0x438]
call fcn.00402366
call fcn.00407539
test eax, eax
je 0x408ffe
call fcn.00407492
test eax, eax
je 0x408ffe
push 1
push dword [ebp - 0x438]
push str.tFolders
push dword [0x449840]
push 0x80000002
call fcn.004086a1
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.004077ad
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 0x409022
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.00407622
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 0x409162
push 0x3ee
push str.Self_Update_Init_Error
push dword [ebp - 0x43c]
push str.failed_to_open_db:
call fcn.00407ac4
add esp, 0x10
mov ebx, eax
cmp dword [ebp - 0x438], 0
je 0x4090b4
push dword [ebp - 0x438]
call sub.msi.dll_MsiConfigureFeatureFromDescriptorA
jmp 0x4090b4
push 0x3ee
push str.Self_Update_Init_Error
push dword [ebp - 0x43c]
push str.file_not_valid:
jmp 0x4090aa
push 0x3ee
push str.Self_Update_Init_Error
push dword [ebp - 0x43c]
push str.failed_to_lock_for_validation:
call fcn.00407ac4
mov ebx, eax
add esp, 0x10
lea ecx, [ebp - 0x42c]
call fcn.00403f95
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 0x40920b
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.00402aef
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 0x4091a6
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.00402aef
mov ecx, dword [ebp - 0x428]
add esp, 0x10
lea ecx, [ecx - 0x10]
mov byte [ebp - 4], 5
call fcn.00401a54
call fcn.0040bd69
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.00409e60
lea eax, [ebp - 0x454]
push 0x449824
push eax
call fcn.00404031
pop ecx
pop ecx
test al, al
je 0x409205
mov edi, str._BackFromArmUpdate
push edi
call fcn.0041fc2e
pop ecx
push eax
push edi
mov ecx, esi
call fcn.004035ee
mov ecx, dword [ebp - 0x454]
lea ecx, [ecx - 0x10]
call fcn.00401a54
lea ecx, [ebp - 0x45c]
call fcn.00409b63
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.0041aa1a
ret