Function at 0x51abb0
Capabilities:
Get common file path
Get disk information
Get disk size
Get program files directory

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x444
mov eax, dword [0x6eb874]
xor eax, ebp
mov dword [ebp - 4], eax
mov dword [ebp - 0x414], 0
lea ecx, [ebp - 0x41c]
call fcn.00413220
push 0
push 0x26
push 0x104
lea ecx, [ebp - 0x41c]
call fcn.0040dc90
push eax
push 0
call dword [sym.imp.SHELL32.dll_SHGetSpecialFolderPathW]
test eax, eax
je 0x51ac06
push 0xffffffffffffffff
lea ecx, [ebp - 0x41c]
call fcn.004c9de0
push 0x400
push 0
lea eax, [ebp - 0x404]
push eax
call fcn.0063a460
add esp, 0xc
lea ecx, [ebp - 0x408]
call fcn.00413220
lea ecx, [ebp - 0x420]
call fcn.00413220
lea ecx, [ebp - 0x404]
push ecx
push 0x200
call dword [sym.imp.KERNEL32.dll_GetLogicalDriveStringsW]
xorps xmm0, xmm0
movlpd qword [ebp - 0x438], xmm0
xorps xmm0, xmm0
movlpd qword [ebp - 0x428], xmm0
lea edx, [ebp - 0x404]
mov dword [ebp - 0x410], edx
mov eax, dword [ebp - 0x410]
add eax, 0x400
mov dword [ebp - 0x43c], eax
mov ecx, dword [ebp - 0x410]
movzx edx, word [ecx]
test edx, edx
je 0x51ae40
mov eax, dword [ebp - 0x410]
push eax
lea ecx, [ebp - 0x408]
call fcn.00413a70
push 2
lea ecx, [ebp - 0x418]
push ecx
mov ecx, dword [ebp + 8]
call fcn.0045e690
push 0x69ad14
lea ecx, [ebp - 0x418]
call fcn.00422730
test eax, eax
je 0x51acd3
push 0x69ad1c
lea ecx, [ebp - 0x418]
call fcn.00422730
test eax, eax
jne 0x51ace0
lea ecx, [ebp - 0x418]
call fcn.00413870
jmp 0x51ac77
push 0
lea ecx, [ebp - 0x408]
call fcn.00422c50
push eax
lea ecx, [ebp - 0x41c]
call fcn.0042a210
cmp eax, 0xffffffff
jne 0x51ad74
lea ecx, [ebp - 0x408]
call fcn.00422c50
push eax
lea ecx, [ebp - 0x430]
call fcn.004131e0
or dword [ebp - 0x414], 1
lea edx, [ebp - 0x430]
push edx
call fcn.0051cae0
add esp, 4
test eax, eax
je 0x51ad74
push 0
push 0
lea eax, [ebp - 0x438]
push eax
lea ecx, [ebp - 0x408]
call fcn.00422c50
push eax
call dword [sym.imp.KERNEL32.dll_GetDiskFreeSpaceExW]
test eax, eax
je 0x51ad74
lea ecx, [ebp - 0x408]
call fcn.00422c50
push eax
call fcn.0051cd90
add esp, 4
test eax, eax
je 0x51ad74
mov dword [ebp - 0x42c], 1
jmp 0x51ad7e
mov dword [ebp - 0x42c], 0
mov cl, byte [ebp - 0x42c]
mov byte [ebp - 0x409], cl
mov edx, dword [ebp - 0x414]
and edx, 1
je 0x51ada7
and dword [ebp - 0x414], 0xfffffffe
lea ecx, [ebp - 0x430]
call fcn.00413870
movzx eax, byte [ebp - 0x409]
test eax, eax
je 0x51adfa
mov ecx, dword [ebp - 0x434]
cmp ecx, dword [ebp - 0x424]
jb 0x51adfa
ja 0x51add0
mov edx, dword [ebp - 0x438]
cmp edx, dword [ebp - 0x428]
jb 0x51adfa
mov eax, dword [ebp - 0x438]
mov dword [ebp - 0x428], eax
mov ecx, dword [ebp - 0x434]
mov dword [ebp - 0x424], ecx
lea edx, [ebp - 0x408]
push edx
lea ecx, [ebp - 0x420]
call fcn.0040d360
lea ecx, [ebp - 0x408]
call fcn.0040dcd0
mov ecx, dword [ebp - 0x410]
lea edx, [ecx + eax*2 + 2]
mov dword [ebp - 0x410], edx
mov eax, dword [ebp - 0x410]
cmp eax, dword [ebp - 0x43c]
jb 0x51ae30
lea ecx, [ebp - 0x418]
call fcn.00413870
jmp 0x51ae40
lea ecx, [ebp - 0x418]
call fcn.00413870
jmp 0x51ac77
lea ecx, [ebp - 0x420]
push ecx
mov ecx, dword [ebp + 8]
call fcn.0040d360
mov edx, dword [ebp - 0x424]
push edx
mov eax, dword [ebp - 0x428]
push eax
lea ecx, [ebp - 0x440]
push ecx
call fcn.0051ce90
add esp, 0xc
push eax
mov ecx, dword [ebp + 0xc]
call fcn.0040d360
lea ecx, [ebp - 0x440]
call fcn.00413870
mov dword [ebp - 0x444], 1
lea ecx, [ebp - 0x420]
call fcn.00413870
lea ecx, [ebp - 0x408]
call fcn.00413870
lea ecx, [ebp - 0x41c]
call fcn.00413870
mov eax, dword [ebp - 0x444]
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.006135ac
mov esp, ebp
pop ebp
ret