Function at 0x14004b390
Capabilities:
Copy file
Delete file

Disassembly:
mov rax, rsp
push rbp
push r12
push r13
push r14
push r15
lea rbp, [rax - 0x348]
sub rsp, 0x420
mov qword [rbp + 0xa0], 0xfffffffffffffffe
mov qword [rax + 0x10], rbx
mov qword [rax + 0x18], rsi
mov qword [rax + 0x20], rdi
mov rax, qword [0x1402fcb80]
xor rax, rsp
mov qword [rbp + 0x310], rax
mov r15, rcx
xor esi, esi
mov dword [rsp + 0x30], esi
lea rcx, [rbp - 0x68]
call qword [sym.imp.SetupXML.dll_public:_void___cdecl_CXMLFileManagerInterface::constructor_void____ptr64]
lea r12, vtable.CUtlX.0
mov qword [rbp - 0x68], r12
lea rcx, [rbp]
call qword [sym.imp.SetupXML.dll_public:_void___cdecl_CXMLFileManagerInterface::constructor_void____ptr64]
nop
lea rax, vtable.CUtlXIca.0
mov qword [rbp], rax
lea rax, [rbp + 0x20]
mov qword [rsp + 0x60], rax
lea r13, vtable.CUtlXProperty.0
mov qword [rbp + 0x20], r13
lea rcx, [rbp + 0x28]
call qword [sym.imp.SetupXML.dll_public:_void___cdecl_CXMLFileManagerInterface::constructor_void____ptr64]
mov qword [rbp + 0x28], r12
lea edx, [rsi + 2]
lea rcx, [rbp + 0x28]
call qword [sym.imp.SetupXML.dll_public:_void___cdecl_CXMLFileManagerInterface::SetFileIndex_enum_XMLFILENAMES____ptr64]
nop
mov qword [rbp + 0x48], rsi
lea rax, vtable.CUtlXSetupMsi.0
mov qword [rbp], rax
mov qword [rsp + 0x70], r13
lea rcx, [rsp + 0x78]
call qword [sym.imp.SetupXML.dll_public:_void___cdecl_CXMLFileManagerInterface::constructor_void____ptr64]
mov qword [rsp + 0x78], r12
lea edx, [rsi + 2]
lea rcx, [rsp + 0x78]
call qword [sym.imp.SetupXML.dll_public:_void___cdecl_CXMLFileManagerInterface::SetFileIndex_enum_XMLFILENAMES____ptr64]
nop
call fcn.1400694ec
mov rcx, rax
mov eax, esi
test rcx, rcx
setne al
test eax, eax
jne 0x14004b488
mov ecx, 0x80004005
call fcn.140011b60
int3
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetElement]
add rax, 0x18
mov qword [rsp + 0x50], rax
lea r8, str.managed
lea rdx, str.__ICA_Setups_Msi___s_1__
lea rcx, [rsp + 0x50]
call fcn.140011640
mov rbx, qword [rsp + 0x50]
mov rdx, rbx
lea rcx, [rbp]
call fcn.1400408b0
nop
lea rdx, [rbx - 0x18]
or r14, 0xffffffffffffffff
lock add dword [rdx + 0x10], r14d
jg 0x14004b4d9
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
lea rdx, [rbp - 0x20]
lea rcx, [rbp]
mov rax, qword [rbp]
call qword [rax + MsiGetFeatureCostA]
xor bl, bl
mov rcx, qword [rax]
call qword [sym.imp.msi.dll_MsiRecordGetStringA]
cmp eax, 5
je 0x14004b4fd
cmp eax, 2
jne 0x14004b4ff
mov bl, 1
mov rdx, qword [rbp - 0x20]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x14004b517
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
test bl, bl
jne 0x14004bbea
lea r8, str.CACHE_SETUP_SOURCE
lea rdx, [rbp - 0x10]
lea rcx, [rsp + 0x70]
call fcn.140053410
nop
mov edx, 1
mov dword [rsp + 0x30], edx
mov rcx, qword [rax]
movzx eax, word [rcx]
cmp ax, word [reloc.msi.dll_MsiGetFeatureCostA]
jne 0x14004b55e
movzx eax, word [rcx + 2]
cmp ax, word [0x1402964f6]
jne 0x14004b55e
mov eax, esi
jmp 0x14004b562
sbb eax, eax
or eax, edx
test eax, eax
jne 0x14004b5c7
lea r8, str.CACHE_SETUP_SOURCE_OPTION
lea rdx, [rbp - 0x40]
lea rcx, [rsp + 0x70]
call fcn.140053410
mov edx, 3
mov dword [rsp + 0x30], edx
mov r8, qword [rax]
mov rcx, rsi
lea r9, str.Disable
nop dword [rax]
nop word [rax + rax]
movzx eax, word [r8 + rcx*2]
inc rcx
cmp ax, word [r9 + rcx*2 - 2]
jne 0x14004b5ba
cmp rcx, 8
jne 0x14004b5a0
mov eax, esi
jmp 0x14004b5bf
sbb eax, eax
or eax, 1
test eax, eax
je 0x14004b5c7
xor bl, bl
jmp 0x14004b5c9
mov bl, 1
test dl, 2
je 0x14004b5f1
and edx, 0xfffffffd
mov dword [rsp + 0x30], edx
mov rdx, qword [rbp - 0x40]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x14004b5ed
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
mov edx, dword [rsp + 0x30]
test dl, 1
je 0x14004b60e
mov rdx, qword [rbp - 0x10]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x14004b60e
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
test bl, bl
jne 0x14004bbea
lea rdx, str.__ICA_SourceFiles_SrcFile
lea rcx, [rbp - 0x68]
call qword [sym.imp.SetupXML.dll_public:_long_int___cdecl_CXMLFileManagerInterface::Select_wchar_t_const____ptr64____ptr64]
mov ebx, eax
test eax, eax
jle 0x14004bbea
call fcn.1400694ec
mov rcx, rax
mov eax, esi
test rcx, rcx
setne al
test eax, eax
jne 0x14004b650
mov ecx, 0x80004005
call fcn.140011b60
int3
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetElement]
add rax, 0x18
mov qword [rbp + 0x58], rax
lea rax, vtable.CUtlCommonPath.0
mov qword [rbp + 0x50], rax
mov dword [rbp + 0x60], esi
call fcn.1400694ec
mov rcx, rax
mov eax, esi
test rcx, rcx
setne al
test eax, eax
jne 0x14004b68b
mov ecx, 0x80004005
call fcn.140011b60
int3
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetElement]
add rax, 0x18
mov qword [rsp + 0x40], rax
call fcn.1400694ec
mov rcx, rax
mov eax, esi
test rcx, rcx
setne al
test eax, eax
jne 0x14004b6b9
mov ecx, 0x80004005
call fcn.140011b60
int3
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetElement]
add rax, 0x18
mov qword [rsp + 0x48], rax
call fcn.1400694ec
mov rcx, rax
mov eax, esi
test rcx, rcx
setne al
test eax, eax
jne 0x14004b6e7
mov ecx, 0x80004005
call fcn.140011b60
int3
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetElement]
add rax, 0x18
mov qword [rsp + 0x60], rax
call fcn.1400694ec
mov rcx, rax
mov eax, esi
test rcx, rcx
setne al
test eax, eax
jne 0x14004b715
mov ecx, 0x80004005
call fcn.140011b60
int3
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetElement]
add rax, 0x18
mov qword [rbp - 0x38], rax
call fcn.1400694ec
mov rcx, rax
mov eax, esi
test rcx, rcx
setne al
test eax, eax
jne 0x14004b742
mov ecx, 0x80004005
call fcn.140011b60
int3
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetElement]
add rax, 0x18
mov qword [rsp + 0x38], rax
lea rdx, [rbp - 0x18]
call fcn.1400409d0
nop
mov rdx, qword [rax]
mov dword [rbp + 0x60], esi
test rdx, rdx
jne 0x14004b76a
mov eax, esi
jmp 0x14004b77a
mov rax, r14
nop dword [rax]
inc rax
cmp word [rdx + rax*2], 0
jne 0x14004b770
mov r8d, eax
lea rcx, [rbp + 0x58]
call fcn.140011b80
nop
mov rdx, qword [rbp - 0x18]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x14004b79f
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
lea rdx, [rsp + 0x58]
lea rcx, [rbp + 0x50]
call fcn.14003c070
nop
lea r8, [0x140296860]
lea rdx, [rbp - 0x48]
lea rcx, [rsp + 0x70]
call fcn.140053410
nop
mov rdx, qword [rax]
mov dword [rbp + 0x60], esi
test rdx, rdx
jne 0x14004b7d3
mov eax, esi
jmp 0x14004b7e0
mov rax, r14
inc rax
cmp word [rdx + rax*2], 0
jne 0x14004b7d6
mov r8d, eax
lea rcx, [rbp + 0x58]
call fcn.140011b80
nop
mov rdx, qword [rbp - 0x48]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x14004b805
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
lea rdx, [0x140296930]
lea rcx, [rbp + 0x50]
call fcn.14003c130
lea rdx, [rsp + 0x68]
lea rcx, [rbp + 0x50]
call fcn.14003c070
nop
cmp qword [r15], 0
je 0x14004b8f2
lea r8, str.Str.CacheSetupSource.Progress.text
lea rdx, [rbp - 0x30]
lea rcx, [rsp + 0x70]
call fcn.140053410
nop
mov r8, qword [rax]
lea rdx, str.Str.ProgressTotalText.Complete
lea rcx, [rsp + 0x70]
call fcn.140053590
nop
mov rdx, qword [rbp - 0x30]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x14004b871
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
lea rdx, str.SetupCacheSource_CopyAllFilesICACustom0
mov ecx, 0x93000000
call qword [r15]
lea rdx, str.1:_0_2:_0_3:_0_4:_1
lea rcx, [rsp + 0x38]
call fcn.140011640
mov r8, qword [rsp + 0x38]
lea rdx, [0x1402962b4]
mov ecx, 0xa000000
call qword [r15]
mov r8d, ebx
lea rdx, str.1:_0_2:__d_3:_0_4:_0
lea rcx, [rsp + 0x38]
call fcn.140011640
mov r8, qword [rsp + 0x38]
lea rdx, [0x1402962b4]
mov ecx, 0xa000000
call qword [r15]
lea rdx, str.1:_1_2:_1_3:_1_4:_0
lea rcx, [rsp + 0x38]
call fcn.140011640
mov r8, qword [rsp + 0x38]
lea rdx, [0x1402962b4]
mov ecx, 0xa000000
call qword [r15]
lea rcx, [rbp + 0xa8]
call fcn.140070da8
nop
xorps xmm0, xmm0
movdqa xmmword [rbp + 0xe0], xmm0
mov qword [rbp + 0xf0], rsi
mov dword [rbp + 0x100], esi
mov rbx, qword [rsp + 0x40]
nop dword [rax]
lea r8, str.file
lea rdx, [rbp - 0x28]
lea rcx, [rbp - 0x68]
call qword [sym.imp.SetupXML.dll_public:_class_ATL::CStringT_wchar_t__class_StrTraitMFC_wchar_t__class_ATL::ChTraitsCRT_wchar_t______cdecl_CXMLFileManagerInterface::GetAttribute_wchar_t_const____ptr64____ptr64]
nop
mov rdx, qword [rax]
lea rcx, [rdx - 0x18]
add rbx, 0xffffffffffffffe8
cmp rcx, rbx
je 0x14004b989
cmp dword [rbx + 0x10], 0
jl 0x14004b97a
mov rax, qword [rbx]
cmp qword [rcx], rax
jne 0x14004b97a
call fcn.1400116e0
mov rdi, rax
lock add dword [rbx + 0x10], 0xffffffff
jg 0x14004b96f
mov rcx, qword [rbx]
mov rax, qword [rcx]
mov rdx, rbx
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
lea rax, [rdi + 0x18]
mov qword [rsp + 0x40], rax
jmp 0x14004b989
mov r8d, dword [rdx - 0x10]
lea rcx, [rsp + 0x40]
call fcn.140011b80
nop
mov rdx, qword [rbp - 0x28]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x14004b9a1
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
mov dword [rbp + 0x60], esi
mov rbx, qword [rsp + 0x40]
test rbx, rbx
jne 0x14004b9b2
mov eax, esi
jmp 0x14004b9bf
mov rax, r14
inc rax
cmp word [rbx + rax*2], 0
jne 0x14004b9b5
mov r8d, eax
mov rdx, rbx
lea rcx, [rbp + 0x58]
call fcn.140011b80
mov r8, qword [rsp + 0x68]
mov rdx, qword [rsp + 0x58]
lea rcx, [rbp + 0x58]
call fcn.1400109d0
mov rdi, qword [rbp + 0x58]
test rdi, rdi
jne 0x14004b9ee
mov eax, esi
jmp 0x14004b9fb
mov rax, r14
inc rax
cmp word [rdi + rax*2], 0
jne 0x14004b9f1
mov r8d, eax
mov rdx, rdi
lea rcx, [rsp + 0x48]
call fcn.140011b80
mov rdx, rdi
lea rcx, [rbp + 0x50]
call fcn.14003cc30
mov rax, qword [r15]
mov rdi, qword [rsp + 0x48]
test rax, rax
je 0x14004ba35
mov r8, rdi
lea rdx, [0x1402962b4]
mov ecx, 0x9000000
call rax
xor r8d, r8d
mov rdx, rdi
lea rcx, [rbp + 0xa8]
call fcn.140070fc4
test eax, eax
je 0x14004ba72
lea rcx, [rbp + 0xa8]
call fcn.140070f64
xor r8d, r8d
lea rdx, [rbp + 0xe0]
mov rcx, rdi
call fcn.140072310
mov rcx, rdi
call qword [sym.imp.KERNEL32.dll_DeleteFileW]
mov dword [rsp + 0x28], esi
mov qword [rsp + 0x20], rsi
mov r9, qword [r15]
lea r8, [0x140049b00]
mov rdx, rdi
mov rcx, rbx
call qword [sym.imp.KERNEL32.dll_CopyFileExW]
test eax, eax
je 0x14004bae0
lea r8, [0x140297184]
lea rdx, str.result
lea rcx, [rbp - 0x68]
call qword [sym.imp.SetupXML.dll_public:_bool___cdecl_CXMLFileManagerInterface::SetAttribute_wchar_t_const____ptr64__wchar_t_const____ptr64____ptr64]
mov r8, rdi
lea rdx, str.file
lea rcx, [rbp - 0x68]
call qword [sym.imp.SetupXML.dll_public:_bool___cdecl_CXMLFileManagerInterface::SetAttribute_wchar_t_const____ptr64__wchar_t_const____ptr64____ptr64]
mov r8, rdi
mov rdx, rbx
call fcn.14004c3b0
lea rcx, [rbp - 0x68]
call qword [sym.imp.SetupXML.dll_public:_long_int___cdecl_CXMLFileManagerInterface::CounterNext_void____ptr64]
test eax, eax
jne 0x14004b920
jmp 0x14004baf5
call qword [sym.imp.KERNEL32.dll_GetLastError]
mov ecx, 0x642
cmp eax, 0x4d3
cmove eax, ecx
mov esi, eax
mov rax, qword [r15]
test rax, rax
je 0x14004bb0f
mov r8d, esi
lea rdx, [0x14029709c]
mov ecx, 0x94000000
call rax
nop
lea rcx, [rbp + 0xa8]
call fcn.140070ef0
nop
mov rdx, qword [rsp + 0x68]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x14004bb36
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rsp + 0x58]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x14004bb50
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rsp + 0x38]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x14004bb6a
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rbp - 0x38]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x14004bb83
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rsp + 0x60]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x14004bb9d
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rsp + 0x48]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x14004bbb7
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rsp + 0x40]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x14004bbd1
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rbp + 0x58]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x14004bbea
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov qword [rsp + 0x70], r13
mov qword [rsp + 0x78], r12
lea rcx, [rsp + 0x78]
call qword [sym.imp.SetupXML.dll_public_virtual:_void___cdecl_CXMLFileManagerInterface::destructor_void____ptr64]
nop
lea rax, vtable.CUtlXIca.0
mov qword [rbp], rax
mov qword [rbp + 0x20], r13
mov qword [rbp + 0x28], r12
lea rcx, [rbp + 0x28]
call qword [sym.imp.SetupXML.dll_public_virtual:_void___cdecl_CXMLFileManagerInterface::destructor_void____ptr64]
nop
mov qword [rbp], r12
lea rcx, [rbp]
call qword [sym.imp.SetupXML.dll_public_virtual:_void___cdecl_CXMLFileManagerInterface::destructor_void____ptr64]
nop
mov qword [rbp - 0x68], r12
lea rcx, [rbp - 0x68]
call qword [sym.imp.SetupXML.dll_public_virtual:_void___cdecl_CXMLFileManagerInterface::destructor_void____ptr64]
mov eax, esi
mov rcx, qword [rbp + 0x310]
xor rcx, rsp
call fcn.1401f2f70
lea r11, [rsp + 0x420]
mov rbx, qword [r11 + 0x38]
mov rsi, qword [r11 + 0x40]
mov rdi, qword [r11 + 0x48]
mov rsp, r11
pop r15
pop r14
pop r13
pop r12
pop rbp
ret