Function at 0x14002c090
Capabilities:
Get common file path
Get program files directory

Disassembly:
mov r11, rsp
push rdi
push r12
push r13
push r14
push r15
sub rsp, 0x8f0
mov qword [rsp + 0x90], 0xfffffffffffffffe
mov qword [r11 + 0x10], rbx
mov qword [r11 + 0x18], rbp
mov qword [r11 + 0x20], rsi
mov rax, qword [0x14012ce40]
xor rax, rsp
mov qword [rsp + 0x8e8], rax
mov rbx, rcx
mov qword [rsp + 0x80], rcx
mov word [rsp + 0xa0], 0
xor edx, edx
mov r8d, 0x206
lea rcx, [r11 - 0x876]
call fcn.1400b57e0
mov word [rsp + 0x2b0], 0
xor edx, edx
mov r8d, 0x206
lea rcx, [rsp + 0x2b2]
call fcn.1400b57e0
lea rsi, method.CList_class_IControlSiteFactory____ptr64__class_IControlSiteFactory____ptr64_.virtual_0
mov qword [rsp + 0x48], rsi
xor ebp, ebp
mov qword [rsp + 0x60], rbp
mov qword [rsp + 0x68], rbp
mov qword [rsp + 0x58], rbp
mov qword [rsp + 0x50], rbp
mov qword [rsp + 0x70], rbp
mov qword [rsp + 0x78], 0xa
mov rax, qword [0x1401370f0]
test rax, rax
jne 0x14002c179
mov ecx, 0x310
call fcn.140084d88
mov qword [rsp + 0x40], rax
test rax, rax
je 0x14002c16f
mov rcx, rax
call fcn.140050830
jmp 0x14002c172
mov rax, rbp
mov qword [0x1401370f0], rax
lea rdx, str.ScrubProgFiles__...
mov rcx, rax
call fcn.140050c00
mov rdi, qword [0x140136ce8]
test rdi, rdi
jne 0x14002c1e3
lea ecx, [rdi + 0x30]
call fcn.140084d88
mov rdi, rax
mov qword [rsp + 0x40], rax
test rax, rax
je 0x14002c1d9
mov ecx, 0x20
call fcn.140084d88
nop
test rax, rax
je 0x14002c1c7
mov qword [rax + 8], rbp
mov qword [rax + 0x10], rbp
mov qword [rax + 0x18], rbp
jmp 0x14002c1ca
mov rax, rbp
mov qword [rdi + 0x28], rax
mov rcx, rdi
call qword [sym.imp.KERNEL32.dll_InitializeCriticalSection]
jmp 0x14002c1dc
mov rdi, rbp
mov qword [0x140136ce8], rdi
mov r9d, 0x104
lea r8, [rsp + 0x6d0]
lea rdx, str.INSTALL_DIRECTORY
mov rcx, rdi
call fcn.14004a950
lea rdx, [rsp + 0x2b0]
mov qword [rsp + 0x20], rdx
xor r9d, r9d
xor r8d, r8d
lea edx, [r9 + 0x26]
xor ecx, ecx
call qword [sym.imp.SHELL32.dll_SHGetFolderPathW]
lea rdx, [0x1400e93f4]
lea rcx, [rsp + 0x2b0]
call qword [sym.imp.SHLWAPI.dll_PathAppendW]
lea r8, [rsp + 0x2b0]
mov edx, 0x104
lea rcx, [rsp + 0xa0]
call fcn.1400b1b70
lea rdx, [rsp + 0x6d0]
lea rcx, [rsp + 0xa0]
call qword [sym.imp.SHLWAPI.dll_PathAppendW]
xor r9d, r9d
lea r8, [0x1400f15b8]
lea rdx, [rsp + 0xa0]
mov rcx, rbx
call fcn.14002bb00
lea r8, [rsp + 0x48]
lea rdx, [rsp + 0xa0]
mov rcx, rbx
call fcn.14002be70
test eax, eax
je 0x14002c742
call fcn.140087bd0
mov rdx, rax
mov ecx, ebp
test rax, rax
setne cl
test ecx, ecx
jne 0x14002c2ba
mov ecx, 0x80004005
call fcn.140006300
int3
mov rax, qword [rax]
mov rcx, rdx
call qword [rax + 0x18]
lea rbx, [rax + 0x18]
mov qword [rsp + 0x30], rbx
mov r15, qword [rsp + 0x50]
mov rax, qword [rsp + 0x60]
mov qword [rsp + 0x40], rax
mov r14d, ebp
or r13, 0xffffffffffffffff
test eax, eax
je 0x14002c725
nop
nop
mov r12, qword [r15 + 0x10]
mov r15, qword [r15]
test r12, r12
je 0x14002c3a1
xor eax, eax
mov rcx, r13
mov rdi, r12
repne scasw ax, word [rdi]
not rcx
sub rcx, 1
mov rdi, rcx
test ecx, ecx
je 0x14002c3a1
mov esi, dword [rbx - 0x10]
mov rbp, r12
sub rbp, rbx
sar rbp, 1
mov edx, 1
sub edx, dword [rbx - 8]
mov eax, dword [rbx - 0xc]
sub eax, ecx
or eax, edx
jge 0x14002c34b
mov edx, ecx
lea rcx, [rsp + 0x30]
call fcn.140006320
mov rbx, qword [rsp + 0x30]
cmp rbp, rsi
ja 0x14002c36b
movsxd rax, edi
lea rsi, [rax + rax]
lea r8, [rbx + rbp*2]
mov r9, rsi
mov rdx, rsi
mov rcx, rbx
call fcn.1400b0c60
jmp 0x14002c383
movsxd rax, edi
lea rsi, [rax + rax]
mov r9, rsi
mov r8, r12
mov rdx, rsi
mov rcx, rbx
call fcn.1400b09f0
test edi, edi
js 0x14002c6da
cmp edi, dword [rbx - 0xc]
jg 0x14002c6da
mov dword [rbx - 0x10], edi
mov word [rsi + rbx], 0
xor ebp, ebp
jmp 0x14002c3f2
lea rdx, [rbx - 0x18]
mov rdi, qword [rdx]
cmp dword [rdx + 8], 0
je 0x14002c3f2
cmp dword [rdx + 0x10], 0
jge 0x14002c3c8
cmp dword [rbx - 0xc], 0
jl 0x14002c6e5
mov dword [rbx - 0x10], ebp
mov word [rbx], 0
jmp 0x14002c3f2
mov eax, r13d
lock xadd dword [rdx + 0x10], eax
add eax, 0xffffffff
test eax, eax
jg 0x14002c3e0
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
mov rax, qword [rdi]
mov rcx, rdi
call qword [rax + 0x18]
lea rbx, [rax + 0x18]
mov qword [rsp + 0x30], rbx
call fcn.140087bd0
mov ecx, ebp
test rax, rax
setne cl
test ecx, ecx
je 0x14002c71a
mov rdx, qword [rax]
mov rcx, rax
call qword [rdx + 0x18]
lea rsi, [rax + 0x18]
mov qword [rsp + 0x38], rsi
lea rdx, str.Faxes
test rdx, 0xffffffffffff0000
jne 0x14002c456
movzx edi, dx
mov ecx, edi
call fcn.14008d18c
test rax, rax
je 0x14002c555
mov r8d, edi
mov rdx, rax
lea rcx, [rsp + 0x38]
call fcn.140006570
mov rsi, qword [rsp + 0x38]
jmp 0x14002c555
xor eax, eax
mov rcx, r13
mov rdi, rdx
repne scasw ax, word [rdi]
not rcx
sub rcx, 1
mov rdi, rcx
test ecx, ecx
jne 0x14002c4cc
lea rdx, [rsi - 0x18]
mov rdi, qword [rdx]
cmp dword [rdx + 8], eax
je 0x14002c555
cmp dword [rdx + 0x10], eax
jge 0x14002c498
cmp dword [rsi - 0xc], eax
jl 0x14002c6f0
mov dword [rsi - 0x10], ebp
mov word [rsi], ax
jmp 0x14002c555
mov eax, r13d
lock xadd dword [rdx + 0x10], eax
add eax, 0xffffffff
test eax, eax
jg 0x14002c4b0
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
mov rax, qword [rdi]
mov rcx, rdi
call qword [rax + 0x18]
lea rsi, [rax + 0x18]
mov qword [rsp + 0x38], rsi
mov rbx, qword [rsp + 0x30]
jmp 0x14002c555
mov ebp, dword [rsi - 0x10]
mov r12, rdx
sub r12, rsi
sar r12, 1
mov ecx, 1
sub ecx, dword [rsi - 8]
mov eax, dword [rsi - 0xc]
sub eax, edi
or eax, ecx
jge 0x14002c501
mov edx, edi
lea rcx, [rsp + 0x38]
call fcn.140006320
mov rsi, qword [rsp + 0x38]
lea rdx, str.Faxes
cmp r12, rbp
ja 0x14002c521
movsxd rax, edi
lea rbp, [rax + rax]
lea r8, [rsi + r12*2]
mov r9, rbp
mov rdx, rbp
mov rcx, rsi
call fcn.1400b0c60
jmp 0x14002c539
movsxd rax, edi
lea rbp, [rax + rax]
mov r9, rbp
mov r8, rdx
mov rdx, rbp
mov rcx, rsi
call fcn.1400b09f0
test edi, edi
js 0x14002c70f
cmp edi, dword [rsi - 0xc]
jg 0x14002c70f
mov dword [rsi - 0x10], edi
mov word [rsi + rbp], 0
xor ebp, ebp
mov rdx, rsi
mov rcx, rbx
call fcn.1400b20b0
test eax, eax
setne dil
lea rdx, [rsi - 0x18]
mov eax, r13d
lock xadd dword [rdx + 0x10], eax
add eax, 0xffffffff
test eax, eax
jg 0x14002c582
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
test dil, dil
je 0x14002c6c5
mov rbx, qword [rsp + 0x30]
cmp dword [rbx - 8], 1
jle 0x14002c5a8
mov edx, dword [rbx - 0x10]
lea rcx, [rsp + 0x30]
call fcn.140006380
mov rbx, qword [rsp + 0x30]
mov qword [rsp + 0x20], rbx
lea r9, [rsp + 0xa0]
lea r8, [0x1400ecb00]
mov edx, 0x104
lea rcx, [rsp + 0x4c0]
call fcn.1400b1010
mov rsi, qword [0x1401370f0]
test rsi, rsi
jne 0x14002c68a
mov ecx, 0x310
call fcn.140084d88
mov rsi, rax
mov qword [rsp + 0x88], rax
test rax, rax
je 0x14002c680
call fcn.140087bd0
mov ecx, ebp
test rax, rax
setne cl
test ecx, ecx
je 0x14002c6fb
mov rdx, qword [rax]
mov rcx, rax
call qword [rdx + 0x18]
add rax, 0x18
mov qword [rsi], rax
mov word [rsi + 0x64], 0
xor eax, eax
mov rcx, r13
lea rdi, [0x1400f5b5c]
repne scasw ax, word [rdi]
not rcx
lea r8d, [rcx - 1]
lea rdx, [0x1400f5b5c]
mov rcx, rsi
call fcn.140006070
lea rcx, [rsi + 8]
call qword [sym.imp.KERNEL32.dll_InitializeCriticalSection]
lea rcx, [rsi + 0x30]
call qword [sym.imp.KERNEL32.dll_InitializeCriticalSection]
lea rcx, [rsi + 0x26c]
mov word [rcx], 0
lea r8, [0x1400f6478]
mov edx, 0x50
call fcn.1400b1b70
nop
jmp 0x14002c683
mov rsi, rbp
mov qword [0x1401370f0], rsi
lea r8, [rsp + 0x4c0]
lea rdx, str._remove_folder__s_r_n
mov rcx, rsi
call fcn.140050c00
mov r9d, 1
lea r8, [0x1400f15b8]
lea rdx, [rsp + 0x4c0]
mov rcx, qword [rsp + 0x80]
call fcn.14002bb00
jmp 0x14002c6ca
mov rbx, qword [rsp + 0x30]
add r14d, 1
cmp r14d, dword [rsp + 0x40]
jae 0x14002c706
jmp 0x14002c2f0
mov ecx, 0x80070057
call fcn.140006300
int3
mov ecx, 0x80070057
call fcn.140006300
nop
mov ecx, 0x80070057
call fcn.140006300
nop
mov ecx, 0x80004005
call fcn.140006300
nop
lea rsi, method.CList_class_IControlSiteFactory____ptr64__class_IControlSiteFactory____ptr64_.virtual_0
jmp 0x14002c725
mov ecx, 0x80070057
call fcn.140006300
nop
mov ecx, 0x80004005
call fcn.140006300
nop
lea rdx, [rbx - 0x18]
lock xadd dword [rdx + 0x10], r13d
add r13d, 0xffffffff
test r13d, r13d
jg 0x14002c742
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov qword [rsp + 0x48], rsi
mov rax, qword [rsp + 0x50]
test rax, rax
je 0x14002c759
mov rax, qword [rax]
test rax, rax
jne 0x14002c751
mov qword [rsp + 0x60], rbp
mov qword [rsp + 0x68], rbp
mov qword [rsp + 0x58], rbp
mov qword [rsp + 0x50], rbp
mov rcx, qword [rsp + 0x70]
call fcn.14008be00
mov rcx, qword [rsp + 0x8e8]
xor rcx, rsp
call fcn.1400b09d0
lea r11, [rsp + 0x8f0]
mov rbx, qword [r11 + 0x38]
mov rbp, qword [r11 + 0x40]
mov rsi, qword [r11 + 0x48]
mov rsp, r11
pop r15
pop r14
pop r13
pop r12
pop rdi
ret