Function at 0x403990
Capabilities:
Check if file exists
Copy file
Create directory
Get file attributes

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x4418e4
mov eax, dword fs:[0]
push eax
sub esp, 0x98
mov eax, dword [0x450398]
xor eax, ebp
mov dword [ebp - 0x10], eax
push ebx
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov edi, ecx
mov eax, dword [edi]
xor ebx, ebx
xor ecx, ecx
mov word [ebp - 0x48], cx
mov ecx, eax
mov dword [ebp - 0x34], 7
mov dword [ebp - 0x38], ebx
lea esi, [ecx + 2]
lea esp, [esp]
mov dx, word [ecx]
add ecx, 2
cmp dx, bx
jne 0x4039e0
sub ecx, esi
sar ecx, 1
push ecx
lea esi, [ebp - 0x48]
call fcn.00417550
mov dword [ebp - 4], ebx
mov eax, dword [edi + 4]
xor edx, edx
mov ecx, eax
mov dword [ebp - 0x6c], 7
mov dword [ebp - 0x70], ebx
mov word [ebp - 0x80], dx
lea esi, [ecx + 2]
mov dx, word [ecx]
add ecx, 2
cmp dx, bx
jne 0x403a13
sub ecx, esi
sar ecx, 1
push ecx
lea esi, [ebp - 0x80]
call fcn.00417550
mov byte [ebp - 4], 1
mov eax, dword [ebp - 0x48]
mov edi, 8
cmp dword [ebp - 0x34], edi
jae 0x403a3f
lea eax, [ebp - 0x48]
push eax
call dword [sym.imp.KERNEL32.dll_GetFileAttributesW]
mov ebx, 0x10
cmp eax, 0xffffffff
je 0x403f23
test bl, al
jne 0x403f23
mov ecx, dword [ebp - 0x80]
cmp dword [ebp - 0x6c], edi
jae 0x403a67
lea ecx, [ebp - 0x80]
lea eax, [ebp - 0xa0]
push eax
call fcn.00413b80
mov byte [ebp - 4], 2
mov ecx, dword [ebp - 0xa0]
push 0x5c
push ecx
call fcn.00428376
add esp, 8
test eax, eax
jne 0x403a91
or eax, 0xffffffff
jmp 0x403a99
sub eax, dword [ebp - 0xa0]
sar eax, 1
lea ecx, [ebp - 0xa4]
lea edx, [ebp - 0xa0]
call fcn.00414080
mov byte [ebp - 4], 3
mov esi, dword [ebp - 0xa4]
push esi
call dword [sym.imp.SHLWAPI.dll_PathFileExistsW]
test eax, eax
jne 0x403ac8
push eax
push esi
push eax
call dword [sym.imp.SHELL32.dll_SHCreateDirectoryExW]
mov eax, dword [ebp - 0x48]
cmp dword [ebp - 0x34], edi
jae 0x403ad3
lea eax, [ebp - 0x48]
mov edx, dword [ebp - 0xa0]
push 0
push edx
push eax
call dword [sym.imp.KERNEL32.dll_CopyFileW]
test eax, eax
je 0x403cda
test byte [0x453d58], 1
jne 0x403b1a
or dword [0x453d58], 1
mov ebx, 0x452c30
mov byte [ebp - 4], 4
call fcn.0041b190
push 0x4422a0
call fcn.00427096
add esp, 4
mov byte [ebp - 4], 3
mov eax, dword [0x452c40]
mov edx, dword [eax + 0x1c]
push 2
push 0
mov ecx, 0x452c40
call edx
test al, al
je 0x403ece
test byte [0x453d58], 1
jne 0x403b64
or dword [0x453d58], 1
mov ebx, 0x452c30
mov byte [ebp - 4], 5
call fcn.0041b190
push 0x4422a0
call fcn.00427096
add esp, 4
mov byte [ebp - 4], 3
mov eax, dword [0x452c40]
mov edx, dword [eax + 0x6c]
push 2
push 0
mov ecx, 0x452c40
call edx
mov edi, eax
xor eax, eax
mov word [ebp - 0x9c], ax
mov eax, dword [ebp - 0xa0]
mov ecx, eax
mov dword [ebp - 0x88], 7
mov dword [ebp - 0x8c], 0
lea esi, [ecx + 2]
mov dx, word [ecx]
add ecx, 2
test dx, dx
jne 0x403ba1
sub ecx, esi
sar ecx, 1
push ecx
lea esi, [ebp - 0x9c]
call fcn.00417550
mov ecx, esi
push ecx
lea edx, [ebp - 0x2c]
push edx
mov byte [ebp - 4], 6
call fcn.00402430
mov esi, eax
lea eax, [ebp - 0x48]
push eax
lea ecx, [ebp - 0x64]
push ecx
mov byte [ebp - 4], 7
call fcn.00402430
mov ebx, 0x10
add esp, 0x10
cmp dword [esi + 0x14], ebx
jb 0x403bee
mov esi, dword [esi]
cmp dword [eax + 0x14], ebx
jb 0x403bf7
mov ecx, dword [eax]
jmp 0x403bf9
mov ecx, eax
mov eax, dword [edi + 0x20]
push esi
push ecx
push str.thread_copy_file__s_to__s_success.
mov edx, 0xa000
sub edx, eax
push 0xffffffffffffffff
push edx
lea eax, [eax + edi + 0x24]
push eax
call fcn.00427aed
add esp, 0x18
mov esi, eax
cmp dword [ebp - 0x50], ebx
jb 0x403c2d
mov ecx, dword [ebp - 0x64]
push ecx
call fcn.00426798
add esp, 4
cmp dword [ebp - 0x18], 0x10
mov ebx, 0xf
mov dword [ebp - 0x50], ebx
mov dword [ebp - 0x54], 0
mov byte [ebp - 0x64], 0
jb 0x403c52
mov edx, dword [ebp - 0x2c]
push edx
call fcn.00426798
add esp, 4
mov byte [ebp - 4], 3
cmp dword [ebp - 0x88], 8
mov dword [ebp - 0x18], ebx
mov dword [ebp - 0x1c], 0
mov byte [ebp - 0x2c], 0
jb 0x403c7c
mov eax, dword [ebp - 0x9c]
push eax
call fcn.00426798
add esp, 4
test esi, esi
jns 0x403c88
mov esi, 0xa000
sub esi, dword [edi + 0x20]
add dword [edi + 0x20], esi
test byte [0x453d58], 1
jne 0x403cba
or dword [0x453d58], 1
mov ebx, 0x452c30
mov byte [ebp - 4], 8
call fcn.0041b190
push 0x4422a0
call fcn.00427096
add esp, 4
mov byte [ebp - 4], 3
mov edx, dword [0x452c40]
mov eax, dword [edx + 0x20]
push 0x32a
push str.ChoiceHelper.cpp
push edi
mov ecx, 0x452c40
call eax
jmp 0x403ece
test byte [0x453d58], 1
jne 0x403d0e
or dword [0x453d58], 1
mov ebx, 0x452c30
mov byte [ebp - 4], 9
call fcn.0041b190
push 0x4422a0
call fcn.00427096
add esp, 4
mov byte [ebp - 4], 3
mov ebx, 0x10
mov edx, dword [0x452c40]
mov eax, dword [edx + 0x1c]
push 4
push 0
mov ecx, 0x452c40
call eax
test al, al
je 0x403ece
test byte [0x453d58], 1
jne 0x403d5e
or dword [0x453d58], 1
mov ebx, 0x452c30
mov byte [ebp - 4], 0xa
call fcn.0041b190
push 0x4422a0
call fcn.00427096
add esp, 4
mov byte [ebp - 4], 3
mov ebx, 0x10
mov edx, dword [0x452c40]
mov eax, dword [edx + 0x6c]
push 4
push 0
mov ecx, 0x452c40
call eax
xor ecx, ecx
mov edi, eax
mov eax, dword [ebp - 0xa0]
mov word [ebp - 0x9c], cx
mov ecx, eax
mov dword [ebp - 0x88], 7
mov dword [ebp - 0x8c], 0
lea esi, [ecx + 2]
lea esp, [esp]
mov dx, word [ecx]
add ecx, 2
test dx, dx
jne 0x403da0
sub ecx, esi
sar ecx, 1
push ecx
lea esi, [ebp - 0x9c]
call fcn.00417550
mov edx, esi
push edx
lea eax, [ebp - 0x64]
push eax
mov byte [ebp - 4], 0xb
call fcn.00402430
mov esi, eax
lea ecx, [ebp - 0x48]
push ecx
lea edx, [ebp - 0x2c]
push edx
mov byte [ebp - 4], 0xc
call fcn.00402430
add esp, 0x10
cmp dword [esi + 0x14], ebx
jb 0x403de8
mov esi, dword [esi]
cmp dword [eax + 0x14], ebx
jb 0x403df1
mov ecx, dword [eax]
jmp 0x403df3
mov ecx, eax
mov eax, dword [edi + 0x20]
push esi
push ecx
push str.thread_copy_file__s_to__s_fail.
mov ecx, 0xa000
push 0xffffffffffffffff
sub ecx, eax
push ecx
lea edx, [eax + edi + 0x24]
push edx
call fcn.00427aed
add esp, 0x18
mov esi, eax
cmp dword [ebp - 0x18], ebx
jb 0x403e27
mov eax, dword [ebp - 0x2c]
push eax
call fcn.00426798
add esp, 4
cmp dword [ebp - 0x50], 0x10
mov ebx, 0xf
mov dword [ebp - 0x18], ebx
mov dword [ebp - 0x1c], 0
mov byte [ebp - 0x2c], 0
jb 0x403e4c
mov ecx, dword [ebp - 0x64]
push ecx
call fcn.00426798
add esp, 4
mov byte [ebp - 4], 3
cmp dword [ebp - 0x88], 8
mov dword [ebp - 0x50], ebx
mov dword [ebp - 0x54], 0
mov byte [ebp - 0x64], 0
jb 0x403e76
mov edx, dword [ebp - 0x9c]
push edx
call fcn.00426798
add esp, 4
test esi, esi
jns 0x403e82
mov esi, 0xa000
sub esi, dword [edi + 0x20]
add dword [edi + 0x20], esi
test byte [0x453d58], 1
jne 0x403eb4
or dword [0x453d58], 1
mov ebx, 0x452c30
mov byte [ebp - 4], 0xd
call fcn.0041b190
push 0x4422a0
call fcn.00427096
add esp, 4
mov byte [ebp - 4], 3
mov eax, dword [0x452c40]
mov edx, dword [eax + 0x20]
push 0x32e
push str.ChoiceHelper.cpp
push edi
mov ecx, 0x452c40
call edx
mov byte [ebp - 4], 2
mov eax, dword [ebp - 0xa4]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x403ef4
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov byte [ebp - 4], 1
mov eax, dword [ebp - 0xa0]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x40424e
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
jmp 0x40424e
mov edx, dword [ebp - 0x80]
cmp dword [ebp - 0x6c], edi
jae 0x403f2e
lea edx, [ebp - 0x80]
mov ecx, dword [ebp - 0x48]
cmp dword [ebp - 0x34], edi
jae 0x403f39
lea ecx, [ebp - 0x48]
call fcn.00402c30
test eax, eax
jne 0x4040cd
test byte [0x453d58], 1
jne 0x403f7a
or dword [0x453d58], 1
mov ebx, 0x452c30
mov byte [ebp - 4], 0xe
call fcn.0041b190
push 0x4422a0
call fcn.00427096
add esp, 4
mov byte [ebp - 4], 1
mov ebx, 0x10
mov edx, dword [0x452c40]
mov eax, dword [edx + 0x1c]
push 2
push 0
mov ecx, 0x452c40
call eax
test al, al
je 0x40424e
test byte [0x453d58], 1
jne 0x403fca
or dword [0x453d58], 1
mov ebx, 0x452c30
mov byte [ebp - 4], 0xf
call fcn.0041b190
push 0x4422a0
call fcn.00427096
add esp, 4
mov byte [ebp - 4], 1
mov ebx, 0x10
mov edx, dword [0x452c40]
mov eax, dword [edx + 0x6c]
push 2
push 0
mov ecx, 0x452c40
call eax
lea ecx, [ebp - 0x80]
push ecx
lea edx, [ebp - 0x64]
push edx
mov esi, eax
call fcn.00402430
mov edi, eax
lea eax, [ebp - 0x48]
push eax
lea ecx, [ebp - 0x2c]
push ecx
mov byte [ebp - 4], 0x10
call fcn.00402430
add esp, 0x10
cmp dword [edi + 0x14], ebx
jb 0x40400a
mov edi, dword [edi]
cmp dword [eax + 0x14], ebx
jb 0x404013
mov ecx, dword [eax]
jmp 0x404015
mov ecx, eax
mov eax, dword [esi + 0x20]
push edi
push ecx
push str.thread_copy_folder__s_to__s_success.
mov edx, 0xa000
sub edx, eax
push 0xffffffffffffffff
push edx
lea eax, [eax + esi + 0x24]
push eax
call fcn.00427aed
add esp, 0x18
mov edi, eax
cmp dword [ebp - 0x18], ebx
jb 0x404049
mov ecx, dword [ebp - 0x2c]
push ecx
call fcn.00426798
add esp, 4
mov byte [ebp - 4], 1
mov dword [ebp - 0x18], 0xf
mov dword [ebp - 0x1c], 0
mov byte [ebp - 0x2c], 0
cmp dword [ebp - 0x50], ebx
jb 0x404070
mov edx, dword [ebp - 0x64]
push edx
call fcn.00426798
add esp, 4
test edi, edi
jns 0x40407c
mov edi, 0xa000
sub edi, dword [esi + 0x20]
add dword [esi + 0x20], edi
test byte [0x453d58], 1
jne 0x4040ae
or dword [0x453d58], 1
mov ebx, 0x452c30
mov byte [ebp - 4], 0x11
call fcn.0041b190
push 0x4422a0
call fcn.00427096
add esp, 4
mov byte [ebp - 4], 1
mov eax, dword [0x452c40]
mov edx, dword [eax + 0x20]
push 0x335
push str.ChoiceHelper.cpp
push esi
mov ecx, 0x452c40
call edx
jmp 0x40424e
test byte [0x453d58], 1
jne 0x404101
or dword [0x453d58], 1
mov ebx, 0x452c30
mov byte [ebp - 4], 0x12
call fcn.0041b190
push 0x4422a0
call fcn.00427096
add esp, 4
mov byte [ebp - 4], 1
mov ebx, 0x10
mov eax, dword [0x452c40]
mov edx, dword [eax + 0x1c]
push 4
push 0
mov ecx, 0x452c40
call edx
test al, al
je 0x40424e
test byte [0x453d58], 1
jne 0x404150
or dword [0x453d58], 1
mov ebx, 0x452c30
mov byte [ebp - 4], 0x13
call fcn.0041b190
push 0x4422a0
call fcn.00427096
add esp, 4
mov byte [ebp - 4], 1
mov ebx, 0x10
mov eax, dword [0x452c40]
mov edx, dword [eax + 0x6c]
push 4
push 0
mov ecx, 0x452c40
call edx
mov esi, eax
lea eax, [ebp - 0x80]
push eax
lea ecx, [ebp - 0x64]
push ecx
call fcn.00402430
mov edi, eax
lea edx, [ebp - 0x48]
push edx
lea eax, [ebp - 0x2c]
push eax
mov byte [ebp - 4], 0x14
call fcn.00402430
add esp, 0x10
cmp dword [edi + 0x14], ebx
jb 0x40418f
mov edi, dword [edi]
cmp dword [eax + 0x14], ebx
jb 0x404198
mov ecx, dword [eax]
jmp 0x40419a
mov ecx, eax
mov eax, dword [esi + 0x20]
push edi
push ecx
push str.thread_copy_folder__s_to__s_fail.
mov ecx, 0xa000
push 0xffffffffffffffff
sub ecx, eax
push ecx
lea edx, [eax + esi + 0x24]
push edx
call fcn.00427aed
add esp, 0x18
mov edi, eax
cmp dword [ebp - 0x18], ebx
jb 0x4041ce
mov eax, dword [ebp - 0x2c]
push eax
call fcn.00426798
add esp, 4
mov byte [ebp - 4], 1
mov dword [ebp - 0x18], 0xf
mov dword [ebp - 0x1c], 0
mov byte [ebp - 0x2c], 0
cmp dword [ebp - 0x50], ebx
jb 0x4041f5
mov ecx, dword [ebp - 0x64]
push ecx
call fcn.00426798
add esp, 4
test edi, edi
jns 0x404201
mov edi, 0xa000
sub edi, dword [esi + 0x20]
add dword [esi + 0x20], edi
test byte [0x453d58], 1
jne 0x404233
or dword [0x453d58], 1
mov ebx, 0x452c30
mov byte [ebp - 4], 0x15
call fcn.0041b190
push 0x4422a0
call fcn.00427096
add esp, 4
mov byte [ebp - 4], 1
mov edx, dword [0x452c40]
mov eax, dword [edx + 0x20]
push 0x339
push str.ChoiceHelper.cpp
push esi
mov ecx, 0x452c40
call eax
mov esi, 8
cmp dword [ebp - 0x6c], esi
jb 0x404264
mov ecx, dword [ebp - 0x80]
push ecx
call fcn.00426798
add esp, 4
xor edx, edx
mov dword [ebp - 0x6c], 7
mov dword [ebp - 0x70], 0
mov word [ebp - 0x80], dx
cmp dword [ebp - 0x34], esi
jb 0x404289
mov eax, dword [ebp - 0x48]
push eax
call fcn.00426798
add esp, 4
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.004267a3
mov esp, ebp
pop ebp
ret