Function at 0x14001f3a8
Capabilities:
Check if file exists
Create directory
Get common file path

Disassembly:
mov qword [rsp + 8], rcx
push rbp
push rbx
push rsi
push rdi
push r14
push r15
lea rbp, [rsp - 0x2f]
sub rsp, 0x98
lea rcx, [rbp - 0x19]
call fcn.14000dba8
nop
mov rax, qword [0x14006a1f8]
or r14, 0xffffffffffffffff
xor r15d, r15d
lea rcx, [rbp - 0x19]
cmp dword [rax - 0x10], r15d
jne 0x14001f3f3
call fcn.14002419c
mov ebx, eax
test eax, eax
jns 0x14001f3ff
jmp 0x14001f898
lea rdx, [0x14006a1f8]
call fcn.140004474
lea rcx, [rbp - 0x19]
call fcn.14001fda4
test eax, eax
jne 0x14001f416
mov ebx, 0x8007000e
jmp 0x14001f898
mov rbx, qword [rbp - 0x19]
test rbx, rbx
jne 0x14001f429
mov ebx, 0x80070057
jmp 0x14001f898
lea rcx, [rbp + 0x6f]
call fcn.14000dba8
nop
lea rcx, [rbp + 0x67]
call fcn.14000dba8
nop
lea rcx, [rbp - 0x21]
call fcn.14000dba8
nop
lea rcx, [rbp + 0x77]
call fcn.14000dba8
nop
lea rcx, [rbp - 0x31]
call fcn.14000dba8
nop
mov rdx, rbx
lea rcx, [rbp - 9]
call fcn.1400044f4
nop
lea rdx, [rbp + 0x6f]
lea rcx, [rbp - 9]
call fcn.14001e0d0
mov ebx, eax
mov rdx, qword [rbp - 9]
add rdx, 0xffffffffffffffe8
mov ecx, r14d
lock xadd dword [rdx + 0x10], ecx
add ecx, r14d
test ecx, ecx
jg 0x14001f498
mov rcx, qword [rdx]
mov r8, qword [rcx]
call qword [rreloc.OLEAUT32.dll_VariantClear + 8]
test ebx, ebx
js 0x14001f4c5
lea rdx, [rbp - 0x29]
mov rcx, qword [rbp + 0x6f]
call fcn.140024044
test eax, eax
js 0x14001f4c5
lea r8, [rbp + 0x77]
lea rdx, [rbp - 0x29]
call fcn.140024118
mov ebx, eax
test eax, eax
jns 0x14001f4df
jmp 0x14001f7f3
mov r8d, 0x24
lea rdx, str.SoftwareMicrosoftVisualStudio16.0
lea rcx, [rbp + 0x77]
call fcn.140004934
mov byte [rbp - 0x29], r15b
mov rdi, qword [rbp + 0x77]
test rdi, rdi
je 0x14001f769
lea rdx, [0x14005a680]
lea rcx, [rbp - 1]
call fcn.1400044f4
nop
lea rdx, [rbp - 1]
lea rcx, [rbp + 0x67]
call fcn.140004474
nop
mov rdx, qword [rbp - 1]
add rdx, 0xffffffffffffffe8
mov eax, r14d
lock xadd dword [rdx + 0x10], eax
add eax, r14d
test eax, eax
jg 0x14001f52b
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
lea r9, [rbp + 0x17]
xor r8d, r8d
xor edx, edx
lea rcx, [0x140056990]
call qword [sym.imp.SHELL32.dll_SHGetKnownFolderPath]
mov ebx, eax
test eax, eax
js 0x14001f7f3
mov rdx, qword [rbp + 0x17]
lea rcx, [rbp + 0xf]
call fcn.1400044f4
nop
mov rcx, qword [rbp + 0x17]
call qword [sym.imp.ole32.dll_CoTaskMemFree]
mov rdx, rdi
lea rcx, [rbp - 0x11]
call fcn.1400044f4
nop
lea rdx, str.Software_
lea rcx, [rbp + 7]
call fcn.1400044f4
nop
mov rcx, qword [rbp + 7]
mov r8d, dword [rcx - 0x10]
mov rdx, rdi
call qword [sym.imp.SHLWAPI.dll_StrCmpNIW]
test eax, eax
jne 0x14001f5e5
mov rax, qword [rbp + 7]
mov r8d, dword [rax - 0x10]
mov rax, qword [rbp - 0x11]
mov r9d, dword [rax - 0x10]
sub r9d, r8d
lea rdx, [rbp + 0x1f]
lea rcx, [rbp - 0x11]
call fcn.14001cd30
nop
lea rdx, [rbp + 0x1f]
lea rcx, [rbp - 0x11]
call fcn.140004474
nop
mov rdx, qword [rbp + 0x1f]
add rdx, 0xffffffffffffffe8
mov eax, r14d
lock xadd dword [rdx + 0x10], eax
add eax, r14d
test eax, eax
jg 0x14001f5e5
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
mov r8, qword [rbp - 0x11]
mov rdx, qword [rbp + 0xf]
lea rcx, [rbp + 0x67]
call fcn.14001fe34
nop
mov rdx, qword [rbp + 7]
add rdx, 0xffffffffffffffe8
mov eax, r14d
lock xadd dword [rdx + 0x10], eax
add eax, r14d
test eax, eax
jg 0x14001f618
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rbp - 0x11]
add rdx, 0xffffffffffffffe8
mov eax, r14d
lock xadd dword [rdx + 0x10], eax
add eax, r14d
test eax, eax
jg 0x14001f639
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rbp + 0xf]
add rdx, 0xffffffffffffffe8
mov eax, r14d
lock xadd dword [rdx + 0x10], eax
add eax, r14d
test eax, eax
jg 0x14001f659
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
mov rdi, qword [rbp + 0x67]
test rdi, rdi
je 0x14001f769
mov rcx, rdi
call qword [sym.imp.SHLWAPI.dll_PathFileExistsW]
test eax, eax
jne 0x14001f715
mov rdx, rdi
lea rcx, [rbp + 0x7f]
call fcn.1400044f4
nop
lea rcx, [rbp + 0x7f]
call fcn.14001fda4
test eax, eax
jne 0x14001f6bb
mov rdx, qword [rbp + 0x7f]
add rdx, 0xffffffffffffffe8
mov eax, r14d
lock xadd dword [rdx + 0x10], eax
add eax, r14d
test eax, eax
jg 0x14001f6b1
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
mov ebx, 0x8007000e
jmp 0x14001f7f3
mov rcx, qword [rbp + 0x7f]
call fcn.14001e27c
mov ebx, eax
test eax, eax
jne 0x14001f6ed
xor edx, edx
mov rcx, rdi
call qword [sym.imp.KERNEL32.dll_CreateDirectoryW]
test eax, eax
jne 0x14001f6ed
call qword [sym.imp.KERNEL32.dll_GetLastError]
movzx ebx, ax
or ebx, 0x80070000
test eax, eax
cmovle ebx, eax
mov rdx, qword [rbp + 0x7f]
add rdx, 0xffffffffffffffe8
mov eax, r14d
lock xadd dword [rdx + 0x10], eax
add eax, r14d
test eax, eax
jg 0x14001f70d
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
test ebx, ebx
js 0x14001f7f3
mov rdx, qword [rbp + 0x67]
mov cl, byte [rbp - 0x29]
call fcn.14001f8cc
mov ebx, eax
test eax, eax
jne 0x14001f7f3
lea rdx, [rbp + 0x77]
lea rcx, [rbp - 0x31]
call fcn.140004474
lea rdx, str._Config
mov rax, r14
inc rax
cmp word [rdx + rax*2], r15w
jne 0x14001f742
mov r8d, eax
lea rcx, [rbp - 0x31]
call fcn.14001cf20
mov sil, byte [rbp - 0x29]
mov rbx, qword [rbp - 0x31]
mov rdi, qword [rbp + 0x77]
test rdi, rdi
jne 0x14001f773
mov ebx, 0x80070057
jmp 0x14001f7f3
test rbx, rbx
je 0x14001f769
cmp qword [0x14006a330], r15
jne 0x14001f788
mov ebx, 0x8000ffff
jmp 0x14001f7f3
call fcn.14001df54
test al, al
jne 0x14001f781
test sil, sil
je 0x14001f7a3
mov r8, rbx
mov rdx, rdi
call fcn.14001f1a4
jmp 0x14001f7ae
mov rdx, rbx
mov rcx, rdi
call fcn.14001f0a8
or edx, 0xffffffff
mov rcx, qword [0x14006a200]
call qword [sym.imp.KERNEL32.dll_WaitForSingleObject]
call fcn.1400200d0
mov rcx, rax
call fcn.140021dac
mov ebx, eax
test eax, eax
js 0x14001f7f3
mov cl, 1
call fcn.14001ed3c
mov ebx, eax
test eax, eax
js 0x14001f7f3
mov byte [0x14006a328], sil
mov rcx, qword [0x14006a200]
call qword [sym.imp.KERNEL32.dll_ReleaseMutex]
nop
mov rdx, qword [rbp - 0x31]
add rdx, 0xffffffffffffffe8
mov eax, r14d
lock xadd dword [rdx + 0x10], eax
add eax, r14d
test eax, eax
jg 0x14001f814
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rbp + 0x77]
add rdx, 0xffffffffffffffe8
mov eax, r14d
lock xadd dword [rdx + 0x10], eax
add eax, r14d
test eax, eax
jg 0x14001f835
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rbp - 0x21]
add rdx, 0xffffffffffffffe8
mov eax, r14d
lock xadd dword [rdx + 0x10], eax
add eax, r14d
test eax, eax
jg 0x14001f856
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rbp + 0x67]
add rdx, 0xffffffffffffffe8
mov eax, r14d
lock xadd dword [rdx + 0x10], eax
add eax, r14d
test eax, eax
jg 0x14001f877
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rbp + 0x6f]
add rdx, 0xffffffffffffffe8
mov eax, r14d
lock xadd dword [rdx + 0x10], eax
add eax, r14d
test eax, eax
jg 0x14001f898
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rbp - 0x19]
add rdx, 0xffffffffffffffe8
mov ecx, r14d
lock xadd dword [rdx + 0x10], ecx
add ecx, r14d
test ecx, ecx
jg 0x14001f8b9
mov rcx, qword [rdx]
mov r8, qword [rcx]
call qword [rreloc.OLEAUT32.dll_VariantClear + 8]
mov eax, ebx
add rsp, 0x98
pop r15
pop r14
pop rdi
pop rsi
pop rbx
pop rbp
ret