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

Disassembly:
mov rax, rsp
mov qword [rax + 8], rbx
mov qword [rax + 0x18], rsi
mov qword [rax + 0x20], rdi
push rbp
push r12
push r13
push r14
push r15
lea rbp, [rax - 0x68]
sub rsp, 0x140
mov r15, r8
mov r14, rdx
mov r12, rcx
xor edi, edi
test rdx, rdx
je 0x140021bcd
test r8, r8
je 0x140021bcd
test r9, r9
je 0x140021bcd
mov rsi, qword [rbp + 0x90]
test rsi, rsi
je 0x140021bcd
mov r13, qword [rbp + 0xa8]
test r13, r13
je 0x140021bcd
mov word [r13], di
mov rdx, r9
lea rcx, [rsp + 0x70]
call fcn.140002cec
lea rbx, [r12 + 0x10]
lea rdx, [rsp + 0x70]
mov rcx, rbx
call fcn.140006324
mov rdx, qword [rsp + 0x70]
add rdx, 0xffffffffffffffe8
or eax, 0xffffffff
lock xadd dword [rdx + 0x10], eax
sub eax, 1
jg 0x14002127c
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 0x140021bc6
mov rcx, qword [rbx]
call qword [sym.imp.SHLWAPI.dll_PathIsDirectoryW]
test eax, eax
jne 0x140021bc6
mov rdi, qword [rbx]
mov rcx, rdi
call qword [sym.imp.SHLWAPI.dll_PathFindFileNameW]
xor ecx, ecx
cmp word [rax], cx
je 0x140021bc6
sub rax, rdi
sar rax, 1
cmp eax, 0xffffffff
je 0x140021bc6
mov rcx, qword [rbx]
mov r9d, dword [rcx - 0x10]
sub r9d, eax
mov r8d, eax
lea rdx, [rsp + 0x58]
mov rcx, rbx
call fcn.140008c50
nop
lea rdx, str..config
or rax, 0xffffffffffffffff
xor ecx, ecx
inc rax
cmp word [rdx + rax*2], cx
jne 0x1400212ec
mov r8d, eax
lea rcx, [rsp + 0x58]
call fcn.140008448
lea rdi, [r12 + 0x18]
mov rdx, rbx
mov rcx, rdi
call fcn.140006324
mov rcx, rdi
call fcn.140021cac
test eax, eax
jne 0x140021328
mov esi, 0x8000ffff
jmp 0x140021ba2
mov rcx, qword [rdi]
sub rcx, 0x18
call fcn.1400028e4
lea rbx, [rax + 0x18]
mov qword [rbp - 0x60], rbx
lea rdx, [rbp - 0x60]
lea rcx, [0x14008e4b8]
call fcn.140006324
nop
lea rdx, [rbx - 0x18]
or eax, 0xffffffff
lock xadd dword [rdx + 0x10], eax
sub eax, 1
jg 0x140021367
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
mov rdx, qword [rsp + 0x58]
mov rcx, rdi
call fcn.140009ab0
test eax, eax
jne 0x140021382
mov esi, 0x8007000e
jmp 0x140021ba2
mov qword [r12], r14
mov al, byte [rbp + 0x98]
mov byte [r12 + 0x28], al
mov al, byte [rbp + 0xa0]
mov byte [r12 + 0x29], al
or rax, 0xffffffffffffffff
xor r14d, r14d
inc rax
cmp word [rsi + rax*2], r14w
jne 0x1400213a3
mov r8d, eax
mov rdx, rsi
lea rcx, [r12 + 8]
call fcn.140002a20
call fcn.1400027c4
mov rcx, rax
test rax, rax
je 0x140021c01
mov rax, qword [rax]
call qword [rax + 0x18]
add rax, 0x18
mov qword [rsp + 0x30], rax
cmp byte [r12 + 0x29], r14b
je 0x140021419
lea r8, [rsp + 0x30]
mov rdx, qword [rsp + 0x58]
mov rcx, r12
call fcn.14004af28
mov esi, eax
xor r15d, r15d
test eax, eax
js 0x140021b82
xor r8d, r8d
xor edx, edx
lea rcx, str.Configuration_is_Volatile.
call fcn.14001097c
jmp 0x1400214ab
mov qword [rsp + 0x68], r14
lea r8, [rsp + 0x68]
mov rdx, r15
mov ecx, 0x1c
call fcn.140009cf8
mov esi, eax
xor r15d, r15d
test eax, eax
js 0x140021490
mov rdx, qword [rsp + 0x68]
lea rcx, [rsp + 0x78]
call fcn.140002cec
nop
lea rdx, [rsp + 0x78]
lea rcx, [rsp + 0x30]
call fcn.140006324
nop
mov rdx, qword [rsp + 0x78]
add rdx, 0xffffffffffffffe8
or eax, 0xffffffff
lock xadd dword [rdx + 0x10], eax
sub eax, 1
jg 0x140021478
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
mov rdx, qword [rsp + 0x58]
lea rcx, [rsp + 0x30]
call fcn.140009ab0
test eax, eax
jne 0x1400214a0
mov esi, 0x8007000e
mov rcx, qword [rsp + 0x68]
call qword [sym.imp.OLEAUT32.dll_SysStringLen]
jmp 0x140021b82
mov rcx, qword [rsp + 0x68]
call qword [sym.imp.OLEAUT32.dll_SysStringLen]
lea rdx, [0x140068fb0]
lea rcx, [rbp - 0x80]
call fcn.140002cec
nop
lea rdx, [rbp - 0x80]
lea rcx, [r12 + 8]
call fcn.140013808
nop
mov rdx, qword [rbp - 0x80]
add rdx, 0xffffffffffffffe8
or eax, 0xffffffff
lock xadd dword [rdx + 0x10], eax
sub eax, 1
jg 0x1400214e9
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
mov r14d, r15d
mov rbx, qword [rsp + 0x30]
test rbx, rbx
je 0x14002154a
mov rcx, rbx
call qword [sym.imp.SHLWAPI.dll_PathFileExistsW]
test eax, eax
je 0x14002154a
cmp byte [r12 + 0x28], r15b
jne 0x14002154a
lea rax, [rbp - 0x50]
mov qword [rsp + 0x20], rax
mov rdx, rbx
call fcn.140021c0c
test al, al
je 0x140021683
lea rax, [rbp - 0x58]
mov qword [rsp + 0x20], rax
mov rdx, qword [rdi]
call fcn.140021c0c
test al, al
je 0x140021683
mov rax, qword [rbp - 0x58]
cmp qword [rbp - 0x50], rax
jae 0x140021683
mov rcx, r12
call fcn.14004ae44
mov esi, eax
test eax, eax
js 0x140021b82
mov rcx, r12
call fcn.14004a430
mov esi, eax
test eax, eax
js 0x140021b82
mov rcx, r12
call fcn.14004a9c0
mov esi, eax
test eax, eax
js 0x140021b82
mov rcx, r12
call fcn.14004aafc
mov esi, eax
test eax, eax
js 0x140021b82
mov esi, 0x8000ffff
cmp qword [rsp + 0x30], r15
jne 0x1400215a9
mov r14d, 0x80070057
jmp 0x140021648
mov qword [rbp + 0x78], r15
lea rax, [rbp + 0x78]
mov qword [rsp + 0x20], rax
lea r9, [0x14007a148]
xor edx, edx
lea r8d, [rdx + 1]
lea rcx, [0x14007a138]
call qword [sym.imp.ole32.dll_CoCreateInstance]
mov r14d, eax
test eax, eax
js 0x140021639
mov rbx, qword [rbp + 0x78]
mov qword [rbp - 0x20], rbx
test rbx, rbx
je 0x1400215ee
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
lea rcx, str.UTF_8
call qword [sym.imp.OLEAUT32.dll_SysReAllocString]
mov rdi, rax
mov qword [rbp - 0x18], rax
test rax, rax
je 0x140021bf3
mov rax, qword [rbx]
or edx, 0xffffffff
mov rcx, rbx
call qword [rax + 0x68]
mov r14d, eax
test eax, eax
jns 0x1400216e2
mov rcx, rdi
call qword [sym.imp.OLEAUT32.dll_SysStringLen]
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
lea rdi, [r12 + 0x18]
mov rcx, qword [rbp + 0x78]
test rcx, rcx
je 0x140021648
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
mov r8, qword [rsp + 0x30]
mov edx, r14d
lea rcx, str.Error_merging_configuration_file
call fcn.140043d74
lea r8, [rsp + 0x30]
mov rdx, qword [rsp + 0x58]
mov rcx, r12
call fcn.14004af28
test eax, eax
jns 0x140021597
mov rdx, rdi
lea rcx, [rsp + 0x30]
call fcn.140006324
lea rax, [r12 + 0x20]
mov qword [rsp + 0x28], rax
mov qword [rsp + 0x20], r15
xor r9d, r9d
lea edx, [r9 + 0x40]
lea r8d, [rdx + 0x40]
mov rbx, qword [rsp + 0x30]
mov rcx, rbx
call qword [sym.imp.SHLWAPI.dll_SHCreateStreamOnFileEx]
mov dword [rbp + 0xb0], eax
mov r8, rbx
xor edx, edx
lea rcx, str.Configuration_file_to_be_used_for_CLR_initialization
call fcn.14001097c
movsxd r8, dword [rbx - 0x10]
cmp r8, 0x7ffffffe
jbe 0x140021b29
mov esi, 0x80070057
mov word [r13], r15w
jmp 0x140021b82
mov rax, qword [rbx]
mov rdx, rdi
mov rcx, rbx
call qword [rax + 0x48]
mov r14d, eax
mov rcx, rdi
test eax, eax
js 0x140021625
call qword [sym.imp.OLEAUT32.dll_SysStringLen]
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
mov qword [rsp + 0x48], r15
lea rax, [r12 + 0x60]
mov qword [rbp - 0x48], rax
lea rax, [r12 + 0x30]
mov qword [rbp - 0x40], rax
lea rax, [rsp + 0x48]
mov qword [rsp + 0x20], rax
lea r8, [rbp - 0x48]
lea rdx, [rbp - 0x40]
lea rcx, [rbp + 0x78]
call fcn.14004b9e4
mov r14d, eax
test eax, eax
jns 0x14002176d
mov rcx, qword [rsp + 0x48]
test rcx, rcx
je 0x140021755
mov rdx, qword [rcx]
call qword [rdx + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rbp + 0x78]
test rcx, rcx
je 0x140021892
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
jmp 0x140021892
mov qword [rsp + 0x40], r15
mov rdi, qword [rsp + 0x48]
lea rax, [rsp + 0x40]
mov qword [rsp + 0x20], rax
lea r9, [0x14007a168]
xor edx, edx
lea r8d, [rdx + 1]
lea rcx, [0x14007a158]
call qword [sym.imp.ole32.dll_CoCreateInstance]
mov r14d, eax
test eax, eax
js 0x1400217dc
mov rbx, qword [rsp + 0x40]
mov qword [rbp - 0x10], rbx
test rbx, rbx
je 0x1400217ba
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
test rdi, rdi
je 0x140021806
mov rax, qword [rbx]
mov rdx, rdi
mov rcx, rbx
call qword [rax + 0x50]
mov r14d, eax
test eax, eax
jns 0x140021806
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rsp + 0x40]
test rcx, rcx
je 0x1400217ed
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rsp + 0x48]
test rcx, rcx
je 0x140021755
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
jmp 0x140021755
test rbx, rbx
je 0x140021814
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
mov rdx, qword [rsp + 0x30]
lea rcx, [rsp + 0x38]
call fcn.140002cec
nop
nop dword [rax]
nop dword [rax + rax]
lea rcx, [rsp + 0x38]
call fcn.140021cac
test eax, eax
jne 0x14002189c
mov rdx, qword [rsp + 0x38]
add rdx, 0xffffffffffffffe8
or eax, 0xffffffff
lock xadd dword [rdx + 0x10], eax
sub eax, 1
jg 0x14002185e
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rcx, qword [rsp + 0x40]
test rcx, rcx
je 0x14002186f
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rsp + 0x48]
test rcx, rcx
je 0x140021880
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rbp + 0x78]
test rcx, rcx
je 0x14002188f
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
mov r14d, esi
lea rdi, [r12 + 0x18]
jmp 0x140021648
mov rcx, qword [rsp + 0x38]
call qword [sym.imp.SHLWAPI.dll_PathIsRelativeW]
test eax, eax
jne 0x14002183e
mov rcx, qword [rsp + 0x38]
call qword [sym.imp.SHLWAPI.dll_PathFileExistsW]
test eax, eax
jne 0x140021908
xor r8d, r8d
mov rdx, qword [rsp + 0x38]
xor ecx, ecx
call qword [sym.imp.SHELL32.dll_SHCreateDirectoryExW]
movzx r14d, ax
or r14d, 0x80070000
test eax, eax
cmovle r14d, eax
test r14d, r14d
jns 0x140021908
mov rdx, qword [rsp + 0x38]
add rdx, 0xffffffffffffffe8
or eax, 0xffffffff
lock xadd dword [rdx + 0x10], eax
sub eax, 1
jg 0x1400217dc
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
jmp 0x1400217dc
mov qword [rsp + 0x50], r15
lea rax, [rsp + 0x50]
mov qword [rsp + 0x28], rax
mov qword [rsp + 0x20], r15
mov edx, 0x1022
mov r9d, 1
lea r8d, [r9 + 0x7f]
mov rcx, qword [rsp + 0x30]
call qword [sym.imp.SHLWAPI.dll_SHCreateStreamOnFileEx]
mov r14d, eax
test eax, eax
jns 0x14002194f
mov rcx, qword [rsp + 0x50]
test rcx, rcx
je 0x1400218e0
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
jmp 0x1400218e0
mov ebx, SafeArrayDestroy
mov word [rbp - 0x78], bx
mov rcx, qword [rsp + 0x50]
mov qword [rbp - 0x70], rcx
test rcx, rcx
je 0x14002196d
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
movups xmm0, xmmword [rbp - 0x78]
movaps xmmword [rbp], xmm0
movsd xmm1, qword [rbp - 0x68]
movsd qword [rbp + 0x10], xmm1
mov rcx, qword [rbp + 0x78]
mov rax, qword [rcx]
lea rdx, [rbp]
call qword [rax + 0x38]
mov r14d, eax
test eax, eax
jns 0x1400219a0
lea rcx, [rbp - 0x78]
call qword [sym.imp.OLEAUT32.dll_VariantCopy]
jmp 0x14002193d
mov qword [rsp + 0x60], r15
lea rax, [rsp + 0x60]
mov qword [rsp + 0x28], rax
mov qword [rsp + 0x20], r15
xor r9d, r9d
xor r8d, r8d
xor edx, edx
lea rdi, [r12 + 0x18]
mov rcx, qword [rdi]
call qword [sym.imp.SHLWAPI.dll_SHCreateStreamOnFileEx]
mov r14d, eax
test eax, eax
jns 0x140021a47
mov rcx, qword [rsp + 0x60]
test rcx, rcx
je 0x1400219e2
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
lea rcx, [rbp - 0x78]
call qword [sym.imp.OLEAUT32.dll_VariantCopy]
mov rcx, qword [rsp + 0x50]
test rcx, rcx
je 0x1400219fd
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rdx, qword [rsp + 0x38]
add rdx, 0xffffffffffffffe8
or eax, 0xffffffff
lock xadd dword [rdx + 0x10], eax
sub eax, 1
jg 0x140021a1d
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rcx, qword [rsp + 0x40]
test rcx, rcx
je 0x140021a2e
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rsp + 0x48]
test rcx, rcx
je 0x140021639
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
jmp 0x140021639
mov word [rbp - 0x38], bx
mov rcx, qword [rsp + 0x60]
mov qword [rbp - 0x30], rcx
test rcx, rcx
je 0x140021a60
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
movups xmm0, xmmword [rbp - 0x38]
movaps xmmword [rbp + 0x20], xmm0
movsd xmm1, qword [rbp - 0x28]
movsd qword [rbp + 0x30], xmm1
mov rcx, qword [rsp + 0x40]
mov rax, qword [rcx]
lea rdx, [rbp + 0x20]
call qword [rax + 0x98]
mov r14d, eax
lea rcx, [rbp - 0x38]
test eax, eax
jns 0x140021a9a
call qword [sym.imp.OLEAUT32.dll_VariantCopy]
jmp 0x1400219d1
call qword [sym.imp.OLEAUT32.dll_VariantCopy]
mov rcx, qword [rsp + 0x60]
test rcx, rcx
je 0x140021ab1
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
lea rcx, [rbp - 0x78]
call qword [sym.imp.OLEAUT32.dll_VariantCopy]
mov rcx, qword [rsp + 0x50]
test rcx, rcx
je 0x140021acc
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rdx, qword [rsp + 0x38]
add rdx, 0xffffffffffffffe8
or eax, 0xffffffff
lock xadd dword [rdx + 0x10], eax
sub eax, 1
jg 0x140021aec
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rcx, qword [rsp + 0x40]
test rcx, rcx
je 0x140021b00
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
nop dword [rax]
mov rcx, qword [rsp + 0x48]
test rcx, rcx
je 0x140021b11
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rbp + 0x78]
test rcx, rcx
je 0x140021683
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
jmp 0x140021683
mov ecx, 0x104
mov rdx, qword [rsp + 0x30]
sub rdx, r13
lea rax, [r8 - 0x104]
add rax, rcx
je 0x140021b5b
movzx eax, word [rdx + r13]
test ax, ax
je 0x140021b5b
mov word [r13], ax
add r13, 2
sub rcx, 1
jne 0x140021b36
lea rax, [r13 - 2]
test rcx, rcx
cmovne rax, r13
mov word [rax], r15w
mov rax, rcx
neg rax
sbb esi, esi
not esi
and esi, 0x8007007a
test rcx, rcx
je 0x140021b82
mov esi, r14d
mov rdx, qword [rsp + 0x30]
add rdx, 0xffffffffffffffe8
or eax, 0xffffffff
lock xadd dword [rdx + 0x10], eax
sub eax, 1
jg 0x140021ba2
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rsp + 0x58]
add rdx, 0xffffffffffffffe8
or ecx, 0xffffffff
lock xadd dword [rdx + 0x10], ecx
sub ecx, 1
jg 0x140021bc2
mov rcx, qword [rdx]
mov r8, qword [rcx]
call qword [rreloc.OLEAUT32.dll_VariantClear + 8]
mov eax, esi
jmp 0x140021bd2
mov eax, 0x80070057
jmp 0x140021bd2
mov eax, 0x80004003
lea r11, [rsp + 0x140]
mov rbx, qword [r11 + 0x30]
mov rsi, qword [r11 + 0x40]
mov rdi, qword [r11 + 0x48]
mov rsp, r11
pop r15
pop r14
pop r13
pop r12
pop rbp
ret
mov ecx, 0x8007000e
call fcn.1400312f0
nop
jmp 0x140021c00
nop
mov ecx, 0x80004005
call fcn.1400312f0
int3