Function at 0x405bd2
Capabilities:
Get common file path
Get disk information
Get disk size
Set current directory

Disassembly:
mov edi, edi
push ebp
mov ebp, esp
sub esp, 0x330
mov eax, dword [0x408004]
xor eax, ebp
mov dword [ebp - 4], eax
mov eax, edx
mov dword [ebp - 0x324], eax
push esi
mov esi, ecx
test eax, eax
jne 0x405bfc
inc eax
jmp 0x405e7a
push ebx
lea eax, [ebp - 0x110]
push eax
push 0x104
call dword [sym.imp.KERNEL32.dll_GetCurrentDirectoryA]
push esi
call dword [sym.imp.KERNEL32.dll_SetCurrentDirectoryA]
xor ebx, ebx
test eax, eax
jne 0x405c3e
push ebx
push 0x10
push ebx
push ebx
mov edx, 0x4bc
xor ecx, ecx
call fcn.004046c7
call fcn.00406512
mov dword [0x409124], eax
xor eax, eax
jmp 0x405e79
push edi
lea eax, [ebp - 0x314]
mov dword [ebp - 0x31c], ebx
push eax
lea eax, [ebp - 0x320]
mov dword [ebp - 0x318], ebx
push eax
lea eax, [ebp - 0x318]
mov dword [ebp - 0x320], ebx
push eax
lea eax, [ebp - 0x31c]
mov dword [ebp - 0x314], ebx
push eax
push ebx
call dword [sym.imp.KERNEL32.dll_GetDiskFreeSpaceA]
test eax, eax
je 0x405e15
mov eax, dword [ebp - 0x318]
imul eax, dword [ebp - 0x31c]
push 0x400
push dword [ebp - 0x320]
push eax
mov dword [ebp - 0x328], eax
call dword [sym.imp.KERNEL32.dll_MulDiv]
mov edi, eax
test edi, edi
je 0x405e15
push ebx
push ebx
lea eax, [ebp - 0x32c]
push eax
lea eax, [ebp - 0x330]
push eax
push ebx
push ebx
push ebx
push ebx
call dword [sym.imp.KERNEL32.dll_GetVolumeInformationA]
test eax, eax
jne 0x405d16
mov edi, 0x200
lea eax, [ebp - 0x310]
push edi
push ebx
push eax
call sub.msvcrt.dll_memset
add esp, 0xc
call fcn.00406512
push ebx
mov dword [0x409124], eax
lea eax, [ebp - 0x310]
push edi
push eax
push ebx
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push ebx
push 0x1000
call dword [sym.imp.KERNEL32.dll_FormatMessageA]
mov edx, 0x4f9
jmp 0x405e57
lea eax, [ebp - 0x110]
push eax
call dword [sym.imp.KERNEL32.dll_SetCurrentDirectoryA]
lea ecx, [ebp - 0xc]
push 6
mov eax, ecx
pop edx
sub esi, eax
lea eax, [edx - 4]
test eax, eax
je 0x405d48
mov al, byte [esi + ecx]
test al, al
je 0x405d43
mov byte [ecx], al
inc ecx
sub edx, 1
jne 0x405d2d
test edx, edx
jne 0x405d48
dec ecx
mov byte [ecx], bl
mov edx, 0x200
mov ecx, dword [ebp - 0x328]
mov eax, ebx
mov dword [ebp - 0x314], 8
cmp ecx, edx
je 0x405d94
add edx, edx
inc eax
movzx esi, ax
cmp ax, word [ebp - 0x314]
jb 0x405d61
push 8
pop ecx
mov eax, esi
cmp si, cx
jne 0x405d94
push ebx
push 0x10
push ebx
push ebx
mov edx, 0x4c5
xor ecx, ecx
call fcn.004046c7
jmp 0x405e76
test byte [0x409a34], 8
je 0x405dc6
test dword [ebp - 0x32c], 0x8000
je 0x405dc6
mov ecx, dword [0x409a38]
movzx eax, ax
shr ecx, 2
mov edx, dword [eax*4 + 0x4089e0]
add edx, edx
add ecx, dword [0x409a38]
jmp 0x405dd6
mov ecx, dword [0x409a38]
movzx eax, ax
mov edx, dword [eax*4 + 0x4089e0]
mov eax, dword [ebp - 0x324]
and eax, 3
cmp al, 3
jne 0x405dea
lea eax, [ecx + edx]
cmp eax, edi
jmp 0x405df9
test byte [ebp - 0x324], 1
je 0x405df7
cmp edx, edi
jmp 0x405df9
cmp ecx, edi
jbe 0x405e0a
lea eax, [ebp - 0xc]
push eax
push ecx
mov ecx, dword [ebp + 8]
call fcn.004027dc
jmp 0x405e78
xor eax, eax
mov dword [0x409124], ebx
inc eax
jmp 0x405e78
mov edi, 0x200
lea eax, [ebp - 0x310]
push edi
push ebx
push eax
call sub.msvcrt.dll_memset
add esp, 0xc
call fcn.00406512
push ebx
mov dword [0x409124], eax
lea eax, [ebp - 0x310]
push edi
push eax
push ebx
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push ebx
push 0x1000
call dword [sym.imp.KERNEL32.dll_FormatMessageA]
mov edx, 0x4b0
push ebx
push 0x10
lea eax, [ebp - 0x310]
xor ecx, ecx
push eax
push esi
call fcn.004046c7
lea eax, [ebp - 0x110]
push eax
call dword [sym.imp.KERNEL32.dll_SetCurrentDirectoryA]
xor eax, eax
pop edi
pop ebx
mov ecx, dword [ebp - 4]
xor ecx, ebp
pop esi
call fcn.00406ff0
leave
ret 4