Function at 0x140049570
Capabilities:
Copy file

Disassembly:
push rbp
push rbx
push rsi
push rdi
push r14
push r15
lea rbp, [rsp - 0x48]
sub rsp, 0x148
mov qword [rbp - 0x20], 0xfffffffffffffffe
mov r14, rcx
mov rax, qword [rcx]
lea rdx, [rbp + 0x80]
call qword [rax + reloc.msi.dll_MsiEnumClientsA]
nop
mov rbx, qword [rax]
call fcn.140069614
mov rcx, rax
xor edi, edi
mov edx, edi
test rax, rax
setne dl
test edx, edx
jne 0x1400495c2
mov ecx, 0x80004005
call fcn.140011b60
int3
mov rax, qword [rax]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetElement]
add rax, 0x18
mov qword [rbp - 8], rax
lea r15, vtable.CUtlCommonPath.0
mov qword [rbp - 0x10], r15
mov dword [rbp], edi
or rsi, 0xffffffffffffffff
test rbx, rbx
jne 0x1400495eb
mov eax, edi
jmp 0x1400495fa
mov rax, rsi
nop
inc rax
cmp word [rbx + rax*2], 0
jne 0x1400495f0
mov r8d, eax
mov rdx, rbx
lea rcx, [rbp - 8]
call fcn.140011b80
nop
mov rdx, qword [rbp + 0x80]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x140049625
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
lea rdx, [rbp + 0x88]
mov rcx, r14
call fcn.1400498a0
nop
mov rbx, qword [rax]
call fcn.140069614
mov rdx, rax
mov ecx, edi
test rax, rax
setne cl
test ecx, ecx
jne 0x140049657
mov ecx, 0x80004005
call fcn.140011b60
int3
mov rax, qword [rax]
mov rcx, rdx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetElement]
add rax, 0x18
mov qword [rsp + 0x48], rax
mov qword [rsp + 0x40], r15
mov dword [rsp + 0x50], edi
test rbx, rbx
jne 0x14004967b
mov eax, edi
jmp 0x14004968a
mov rax, rsi
nop
inc rax
cmp word [rbx + rax*2], 0
jne 0x140049680
mov r8d, eax
mov rdx, rbx
lea rcx, [rsp + 0x48]
call fcn.140011b80
nop
mov rdx, qword [rbp + 0x88]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x1400496b6
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
call fcn.140069614
mov rdx, rax
mov ecx, edi
test rax, rax
setne cl
test ecx, ecx
jne 0x1400496d5
mov ecx, 0x80004005
call fcn.140011b60
int3
mov rax, qword [rax]
mov rcx, rdx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetElement]
add rax, 0x18
mov qword [rbp - 0x68], rax
mov qword [rbp - 0x70], r15
cmp dword [rsp + 0x50], 0xfeef04bd
jne 0x140049717
movaps xmm0, xmmword [rsp + 0x50]
movaps xmmword [rbp - 0x60], xmm0
movaps xmm1, xmmword [rsp + 0x60]
movaps xmmword [rbp - 0x50], xmm1
movaps xmm0, xmmword [rsp + 0x70]
movaps xmmword [rbp - 0x40], xmm0
mov eax, dword [rbp - 0x80]
mov dword [rbp - 0x30], eax
jmp 0x14004971b
mov dword [rsp + 0x50], edi
mov dword [rbp - 0x60], edi
mov rdx, qword [rsp + 0x48]
test rdx, rdx
jne 0x14004972c
mov eax, edi
jmp 0x14004973a
mov rax, rsi
nop
inc rax
cmp word [rdx + rax*2], 0
jne 0x140049730
mov r8d, eax
lea rcx, [rbp - 0x68]
call fcn.140011b80
nop
lea rcx, [rbp - 0x70]
call fcn.14003c9d0
lea rdx, [rbp + 0x90]
lea rcx, [rbp - 0x70]
call fcn.14003c180
nop
mov rdx, qword [rax]
lea rcx, [rbp - 0x70]
call fcn.14003cd40
nop
mov rdx, qword [rbp + 0x90]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x140049789
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
cmp qword [r14 + 0x48], 0
je 0x140049839
lea rdx, [rsp + 0x30]
lea rcx, [rsp + 0x40]
call fcn.14003c0d0
mov rbx, rax
lea rdx, [rbp + 0x98]
lea rcx, [rbp - 0x10]
call fcn.14003c0d0
mov dword [rsp + 0x28], 1
mov qword [rsp + 0x20], rdi
mov r9, qword [r14 + 0x48]
lea r8, [0x140049c10]
mov rdx, qword [rbx]
mov rcx, qword [rax]
call qword [sym.imp.KERNEL32.dll_CopyFileExW]
test eax, eax
sete bl
mov rdx, qword [rbp + 0x98]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x1400497fb
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rsp + 0x30]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x140049814
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
test bl, bl
je 0x14004982d
call qword [sym.imp.KERNEL32.dll_GetLastError]
mov ecx, 0x642
cmp eax, 0x4d3
cmove eax, ecx
mov edi, eax
mov rax, qword [r14]
mov edx, edi
mov rcx, r14
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rbp - 0x68]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x140049852
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 0x14004986c
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rbp - 8]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x140049885
mov rcx, qword [rdx]
mov r8, qword [rcx]
call qword [rreloc.OLEAUT32.dll_VariantClear + 8]
mov eax, edi
add rsp, 0x148
pop r15
pop r14
pop rdi
pop rsi
pop rbx
pop rbp
ret