Function at 0x140049460
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.1400694ec
mov rcx, rax
xor edi, edi
mov edx, edi
test rax, rax
setne dl
test edx, edx
jne 0x1400494b2
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 0x1400494db
mov eax, edi
jmp 0x1400494ea
mov rax, rsi
nop
inc rax
cmp word [rbx + rax*2], 0
jne 0x1400494e0
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 0x140049515
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
lea rdx, [rbp + 0x88]
mov rcx, r14
call fcn.140049790
nop
mov rbx, qword [rax]
call fcn.1400694ec
mov rdx, rax
mov ecx, edi
test rax, rax
setne cl
test ecx, ecx
jne 0x140049547
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 0x14004956b
mov eax, edi
jmp 0x14004957a
mov rax, rsi
nop
inc rax
cmp word [rbx + rax*2], 0
jne 0x140049570
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 0x1400495a6
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
call fcn.1400694ec
mov rdx, rax
mov ecx, edi
test rax, rax
setne cl
test ecx, ecx
jne 0x1400495c5
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 0x140049607
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 0x14004960b
mov dword [rsp + 0x50], edi
mov dword [rbp - 0x60], edi
mov rdx, qword [rsp + 0x48]
test rdx, rdx
jne 0x14004961c
mov eax, edi
jmp 0x14004962a
mov rax, rsi
nop
inc rax
cmp word [rdx + rax*2], 0
jne 0x140049620
mov r8d, eax
lea rcx, [rbp - 0x68]
call fcn.140011b80
nop
lea rcx, [rbp - 0x70]
call fcn.14003c8c0
lea rdx, [rbp + 0x90]
lea rcx, [rbp - 0x70]
call fcn.14003c070
nop
mov rdx, qword [rax]
lea rcx, [rbp - 0x70]
call fcn.14003cc30
nop
mov rdx, qword [rbp + 0x90]
add rdx, 0xffffffffffffffe8
lock add dword [rdx + 0x10], 0xffffffff
jg 0x140049679
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
cmp qword [r14 + 0x48], 0
je 0x140049729
lea rdx, [rsp + 0x30]
lea rcx, [rsp + 0x40]
call fcn.14003bfc0
mov rbx, rax
lea rdx, [rbp + 0x98]
lea rcx, [rbp - 0x10]
call fcn.14003bfc0
mov dword [rsp + 0x28], 1
mov qword [rsp + 0x20], rdi
mov r9, qword [r14 + 0x48]
lea r8, [0x140049b00]
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 0x1400496eb
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 0x140049704
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
test bl, bl
je 0x14004971d
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 0x140049742
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 0x14004975c
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 0x140049775
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