Function at 0x1400219e8
Capabilities:
Check if file exists
Create directory

Disassembly:
mov qword [rsp + 0x10], rbx
push rbp
push rsi
push rdi
push r12
push r13
push r14
push r15
lea rbp, [rsp - 0x50]
sub rsp, 0x150
mov rax, qword [0x1400922d0]
xor rax, rsp
mov qword [rbp + 0x40], rax
mov r15, r8
mov r14, rdx
mov r13, rcx
mov rsi, qword [rbp + 0xb0]
mov r12, qword [rbp + 0xc8]
mov qword [rsp + 0x78], r12
xor edi, edi
test rdx, rdx
je 0x14002233a
test r8, r8
je 0x14002233a
test r9, r9
je 0x14002233a
test rsi, rsi
je 0x14002233a
test r12, r12
je 0x14002233a
mov word [r12], di
mov rdx, r9
lea rcx, [rsp + 0x58]
call fcn.140002f00
lea rbx, [r13 + 0x10]
lea rdx, [rsp + 0x58]
mov rcx, rbx
call fcn.1400068a0
mov rdx, qword [rsp + 0x58]
add rdx, 0xffffffffffffffe8
or eax, 0xffffffff
lock xadd dword [rdx + 0x10], eax
sub eax, 1
jg 0x140021aa2
lfence
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
mov rcx, qword [rbx]
call qword [sym.imp.SHLWAPI.dll_PathFileExistsW]
test eax, eax
je 0x140022333
mov rcx, qword [rbx]
call qword [sym.imp.SHLWAPI.dll_PathIsDirectoryW]
test eax, eax
jne 0x140022333
mov rdi, qword [rbx]
mov rcx, rdi
call qword [sym.imp.SHLWAPI.dll_PathFindFileNameW]
mov rcx, rax
xor eax, eax
cmp word [rcx], ax
je 0x140022333
sub rcx, rdi
sar rcx, 1
cmp ecx, 0xffffffff
je 0x140022333
mov qword [rsp + 0x50], rax
mov rax, qword [rbx]
mov r9d, dword [rax - 0x10]
sub r9d, ecx
mov r8d, ecx
lea rdx, [rsp + 0x50]
mov rcx, rbx
call fcn.1400093f0
nop
lea rdx, str..config
or rax, 0xffffffffffffffff
xor ecx, ecx
inc rax
cmp word [rdx + rax*2], cx
jne 0x140021b1a
mov r8d, eax
lea rcx, [rsp + 0x50]
call fcn.140008ba0
lea rdi, [r13 + 0x18]
mov rdx, rbx
mov rcx, rdi
call fcn.1400068a0
mov rcx, rdi
call fcn.140022420
test eax, eax
jne 0x140021b55
mov edi, 0x8000ffff
jmp 0x14002230c
mov rcx, qword [rdi]
sub rcx, 0x18
call fcn.140002a70
lea rbx, [rax + 0x18]
mov qword [rbp - 0x68], rbx
lea rdx, [rbp - 0x68]
lea rcx, [0x1400934e8]
call fcn.1400068a0
nop
lea rdx, [rbx - 0x18]
or eax, 0xffffffff
lock xadd dword [rdx + 0x10], eax
xor ebx, ebx
sub eax, 1
jg 0x140021b99
lfence
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
mov rdx, qword [rsp + 0x50]
mov rcx, rdi
call fcn.14000a324
test eax, eax
jne 0x140021bb4
mov edi, 0x8007000e
jmp 0x14002230c
mov qword [r13], r14
mov al, byte [rbp + 0xb8]
mov byte [r13 + 0x28], al
mov al, byte [rbp + 0xc0]
mov byte [r13 + 0x29], al
or rax, 0xffffffffffffffff
inc rax
cmp word [rsi + rax*2], bx
jne 0x140021bd0
mov r8d, eax
mov rdx, rsi
lea rcx, [r13 + 8]
call fcn.140002c00
call fcn.140002950
mov rcx, rax
xor esi, esi
test rax, rax
je 0x140022366
mov rax, qword [rax]
call qword [rax + 0x18]
lea rbx, [rax + 0x18]
mov qword [rsp + 0x48], rbx
cmp byte [r13 + 0x29], sil
je 0x140021c42
lea r8, [rsp + 0x48]
mov rdx, qword [rsp + 0x50]
mov rcx, r13
call fcn.14004d6fc
mov edi, eax
test eax, eax
js 0x1400222e9
xor r8d, r8d
xor edx, edx
lea rcx, str.Configuration_is_Volatile.
call fcn.1400106fc
jmp 0x140021cd4
mov qword [rbp + 0x10], rsi
lea r8, [rbp + 0x10]
mov rdx, r15
mov ecx, 0x1c
call fcn.14000a5a0
mov edi, eax
test eax, eax
js 0x140021cbb
mov rdx, qword [rbp + 0x10]
lea rcx, [rsp + 0x60]
call fcn.140002f00
nop
lea rdx, [rsp + 0x60]
lea rcx, [rsp + 0x48]
call fcn.1400068a0
nop
mov rdx, qword [rsp + 0x60]
add rdx, 0xffffffffffffffe8
or eax, 0xffffffff
lock xadd dword [rdx + 0x10], eax
sub eax, 1
jg 0x140021c9e
lfence
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
mov rdx, qword [rsp + 0x50]
lea rcx, [rsp + 0x48]
call fcn.14000a324
test eax, eax
jne 0x140021cca
mov edi, 0x8007000e
mov rbx, qword [rsp + 0x48]
mov rcx, qword [rbp + 0x10]
call qword [sym.imp.OLEAUT32.dll_SysStringLen]
jmp 0x1400222ee
mov rcx, qword [rbp + 0x10]
call qword [sym.imp.OLEAUT32.dll_SysStringLen]
lea rdx, [0x14006d440]
lea rcx, [rsp + 0x68]
call fcn.140002f00
nop
lea rdx, [rsp + 0x68]
lea rcx, [r13 + 8]
call fcn.140013998
nop
mov rdx, qword [rsp + 0x68]
add rdx, 0xffffffffffffffe8
or eax, 0xffffffff
lock xadd dword [rdx + 0x10], eax
xor r14d, r14d
sub eax, 1
jg 0x140021d1a
lfence
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
mov esi, r14d
mov edi, 0x8000ffff
mov rbx, qword [rsp + 0x48]
test rbx, rbx
je 0x140021d80
mov rcx, rbx
call qword [sym.imp.SHLWAPI.dll_PathFileExistsW]
test eax, eax
je 0x140021d80
cmp byte [r13 + 0x28], r14b
jne 0x140021d80
lea rax, [rbp - 0x58]
mov qword [rsp + 0x20], rax
mov rdx, rbx
call fcn.140022374
test al, al
je 0x14002221f
lea rax, [rbp - 0x60]
mov qword [rsp + 0x20], rax
mov rdx, qword [r13 + 0x18]
call fcn.140022374
test al, al
je 0x14002221f
mov rax, qword [rbp - 0x60]
cmp qword [rbp - 0x58], rax
jae 0x14002221f
mov rcx, r13
call fcn.14004d600
test eax, eax
jns 0x140021d93
mov edi, eax
jmp 0x1400222ee
lfence
mov rcx, r13
call fcn.14004c9b8
test eax, eax
js 0x1400222e7
lfence
mov rcx, r13
call fcn.14004cf60
test eax, eax
js 0x1400222e7
lfence
mov rcx, r13
call fcn.14004d0e0
test eax, eax
js 0x1400222e7
lfence
mov rbx, qword [rsp + 0x48]
test rbx, rbx
jne 0x140021de7
mov esi, 0x80070057
lea rbx, [r13 + 0x18]
jmp 0x14002214e
mov qword [rbp + 0x20], r14
lea rdx, [rbp + 0x20]
call fcn.14004d4fc
mov esi, eax
test eax, eax
jns 0x140021e0b
mov rcx, qword [rbp + 0x20]
test rcx, rcx
je 0x140021dde
mov rdx, qword [rcx]
call qword [rdx + reloc.OLEAUT32.dll_SafeArrayGetDim]
jmp 0x140021dde
mov qword [rbp + 0x18], r14
mov qword [rsp + 0x70], r14
lea rcx, [rsp + 0x70]
call fcn.14004e4f8
mov esi, eax
test eax, eax
js 0x140021e87
mov r14, qword [rsp + 0x70]
test r14, r14
je 0x140021eb3
mov rax, qword [r14]
mov rcx, r14
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
lea r9, [r13 + 0x60]
lea r8, [r13 + 0x30]
mov rdx, qword [rbp + 0x20]
mov rcx, r14
call fcn.140052ac0
mov esi, eax
xor r15d, r15d
test eax, eax
js 0x140021e7b
mov rax, qword [r14]
lea r8, [rbp + 0x18]
lea rdx, [0x14007d0d8]
mov rcx, r14
call qword [rax]
mov esi, eax
mov rax, qword [rbp + 0x18]
test esi, esi
cmovs rax, r15
mov qword [rbp + 0x18], rax
mov rax, qword [r14]
mov rcx, r14
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
xor r14d, r14d
test esi, esi
jns 0x140021eb3
mov rcx, qword [rbp + 0x18]
test rcx, rcx
je 0x140021e9b
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rbp + 0x20]
test rcx, rcx
je 0x140021dde
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
jmp 0x140021dde
mov qword [rbp + 0x28], r14
mov r9, qword [rbp + 0x18]
lea rdx, [rbp + 0x28]
call fcn.14004d44c
mov esi, eax
test eax, eax
jns 0x140021edb
mov rcx, qword [rbp + 0x28]
test rcx, rcx
je 0x140021e8b
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
jmp 0x140021e8b
mov qword [rsp + 0x40], r14
mov rdx, rbx
lea rcx, [rsp + 0x40]
call fcn.140002f00
lea rcx, [rsp + 0x40]
call fcn.140022420
test eax, eax
jne 0x140021f54
mov rdx, qword [rsp + 0x40]
add rdx, 0xffffffffffffffe8
or eax, 0xffffffff
lock xadd dword [rdx + 0x10], eax
sub eax, 1
jg 0x140021f1e
lfence
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rcx, qword [rbp + 0x28]
test rcx, rcx
je 0x140021f2e
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rbp + 0x18]
test rcx, rcx
je 0x140021f3e
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rbp + 0x20]
test rcx, rcx
je 0x140021f4d
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
mov esi, edi
jmp 0x140021dde
mov rcx, qword [rsp + 0x40]
call qword [sym.imp.SHLWAPI.dll_PathIsRelativeW]
test eax, eax
jne 0x140021efb
mov rcx, qword [rsp + 0x40]
call qword [sym.imp.SHLWAPI.dll_PathFileExistsW]
test eax, eax
jne 0x140021fbf
xor r8d, r8d
mov rdx, qword [rsp + 0x40]
xor ecx, ecx
call qword [sym.imp.SHELL32.dll_SHCreateDirectoryExW]
movzx esi, ax
or esi, 0x80070000
test eax, eax
cmovle esi, eax
test esi, esi
jns 0x140021fbf
mov rdx, qword [rsp + 0x40]
add rdx, 0xffffffffffffffe8
or eax, 0xffffffff
lock xadd dword [rdx + 0x10], eax
sub eax, 1
jg 0x140021eca
lfence
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
jmp 0x140021eca
mov qword [rbp + 0x30], r14
lea rax, [rbp + 0x30]
mov qword [rsp + 0x28], rax
mov qword [rsp + 0x20], r14
mov edx, 0x1022
mov r9d, 1
lea r8d, [r9 + 0x7f]
mov rcx, rbx
call qword [sym.imp.SHLWAPI.dll_SHCreateStreamOnFileEx]
mov esi, eax
test eax, eax
jns 0x140022000
mov rcx, qword [rbp + 0x30]
test rcx, rcx
je 0x140021f94
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
jmp 0x140021f94
mov r15d, SafeArrayGetDim
mov word [rbp - 0x80], r15w
mov rcx, qword [rbp + 0x30]
mov qword [rbp - 0x78], rcx
test rcx, rcx
je 0x14002201f
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
movups xmm0, xmmword [rbp - 0x80]
movaps xmmword [rbp - 0x30], xmm0
movsd xmm1, qword [rbp - 0x70]
movsd qword [rbp - 0x20], xmm1
mov rcx, qword [rbp + 0x20]
mov rax, qword [rcx]
lea rdx, [rbp - 0x30]
call qword [rax + 0x38]
mov esi, eax
test eax, eax
jns 0x140022051
lea rcx, [rbp - 0x80]
call qword [sym.imp.OLEAUT32.dll_VariantCopy]
jmp 0x140021fef
lfence
mov qword [rbp + 0x38], r14
lea rax, [rbp + 0x38]
mov qword [rsp + 0x28], rax
mov qword [rsp + 0x20], r14
xor r9d, r9d
xor r8d, r8d
xor edx, edx
lea rbx, [r13 + 0x18]
mov rcx, qword [rbx]
call qword [sym.imp.SHLWAPI.dll_SHCreateStreamOnFileEx]
mov esi, eax
test eax, eax
js 0x1400220d2
mov word [rbp - 0x50], r15w
mov rcx, qword [rbp + 0x38]
mov qword [rbp - 0x48], rcx
test rcx, rcx
je 0x14002209a
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
movups xmm0, xmmword [rbp - 0x50]
movaps xmmword [rbp - 0x10], xmm0
movsd xmm1, qword [rbp - 0x40]
movsd qword [rbp], xmm1
mov rcx, qword [rbp + 0x28]
mov rax, qword [rcx]
lea rdx, [rbp - 0x10]
call qword [rax + 0x98]
mov esi, eax
lea rcx, [rbp - 0x50]
test eax, eax
jns 0x140022193
call qword [sym.imp.OLEAUT32.dll_VariantCopy]
nop
mov rcx, qword [rbp + 0x38]
test rcx, rcx
je 0x1400220e2
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
lea rcx, [rbp - 0x80]
call qword [sym.imp.OLEAUT32.dll_VariantCopy]
mov rcx, qword [rbp + 0x30]
test rcx, rcx
je 0x1400220fc
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rdx, qword [rsp + 0x40]
add rdx, 0xffffffffffffffe8
or eax, 0xffffffff
lock xadd dword [rdx + 0x10], eax
sub eax, 1
jg 0x14002211f
lfence
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rcx, qword [rbp + 0x28]
test rcx, rcx
je 0x14002212f
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rbp + 0x18]
test rcx, rcx
je 0x14002213f
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rbp + 0x20]
test rcx, rcx
je 0x14002214e
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
lfence
mov r8, qword [rsp + 0x48]
mov edx, esi
lea rcx, str.Error_merging_configuration_file
call fcn.140045c88
lea r8, [rsp + 0x48]
mov rdx, qword [rsp + 0x50]
mov rcx, r13
call fcn.14004d6fc
test eax, eax
jns 0x140021dcf
lfence
mov rdx, rbx
lea rcx, [rsp + 0x48]
call fcn.1400068a0
jmp 0x140022215
call qword [sym.imp.OLEAUT32.dll_VariantCopy]
mov rcx, qword [rbp + 0x38]
test rcx, rcx
je 0x1400221a9
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
lea rcx, [rbp - 0x80]
call qword [sym.imp.OLEAUT32.dll_VariantCopy]
mov rcx, qword [rbp + 0x30]
test rcx, rcx
je 0x1400221c3
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rdx, qword [rsp + 0x40]
add rdx, 0xffffffffffffffe8
or eax, 0xffffffff
lock xadd dword [rdx + 0x10], eax
sub eax, 1
jg 0x1400221e6
lfence
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rcx, qword [rbp + 0x28]
test rcx, rcx
je 0x1400221f6
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rbp + 0x18]
test rcx, rcx
je 0x140022206
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rbp + 0x20]
test rcx, rcx
je 0x140022215
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
mov r12, qword [rsp + 0x78]
mov rbx, qword [rsp + 0x48]
mov qword [rsp + 0x30], r14
mov dword [rsp + 0x28], 0x80
mov dword [rsp + 0x20], 3
xor r9d, r9d
mov edx, 0x80000000
lea r8d, [r9 + 1]
mov rcx, rbx
call qword [sym.imp.KERNEL32.dll_CreateFileW]
mov qword [r13 + 0x20], rax
cmp rax, 0xffffffffffffffff
jne 0x140022264
xor r8d, r8d
mov edx, edi
lea rcx, str.Failed_to_acquire_lock_on_application_config_file
call fcn.140045c24
mov r8, rbx
xor edx, edx
lea rcx, str.Configuration_file_to_be_used_for_CLR_initialization
call fcn.1400106fc
movsxd r8, dword [rbx - 0x10]
cmp r8, 0x7ffffffe
jbe 0x14002228e
mov edi, 0x80070057
mov word [r12], r14w
jmp 0x1400222ee
mov ecx, 0x104
mov rdx, rbx
sub rdx, r12
lea rax, [rcx - 0x104]
add rax, r8
je 0x1400222be
movzx eax, word [rdx + r12]
test ax, ax
je 0x1400222be
mov word [r12], ax
add r12, 2
sub rcx, 1
jne 0x140022299
lea rax, [r12 - 2]
test rcx, rcx
cmovne rax, r12
mov word [rax], r14w
mov rax, rcx
neg rax
sbb edi, edi
not edi
and edi, 0x8007007a
test rcx, rcx
je 0x1400222ee
mov edi, esi
jmp 0x1400222ee
mov edi, eax
mov rbx, qword [rsp + 0x48]
lea rdx, [rbx - 0x18]
or eax, 0xffffffff
lock xadd dword [rdx + 0x10], eax
sub eax, 1
jg 0x14002230c
lfence
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rsp + 0x50]
add rdx, 0xffffffffffffffe8
or ecx, 0xffffffff
lock xadd dword [rdx + 0x10], ecx
sub ecx, 1
jg 0x14002232f
lfence
mov rcx, qword [rdx]
mov r8, qword [rcx]
call qword [rreloc.OLEAUT32.dll_VariantClear + 8]
mov eax, edi
jmp 0x14002233f
mov eax, 0x80070057
jmp 0x14002233f
mov eax, 0x80004003
mov rcx, qword [rbp + 0x40]
xor rcx, rsp
call fcn.140001020
mov rbx, qword [rsp + 0x198]
add rsp, 0x150
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbp
ret
mov ecx, 0x80004005
call fcn.1400327c0
int3