Function at 0x40c6e2
Capabilities:
Get disk information

Disassembly:
mov al, byte [0x4459b8]
sub esp, 0x48c
push ebx
push ebp
push esi
mov esi, ecx
push edi
mov edi, edx
cmp al, 0xff
jne 0x40c708
call fcn.0041227a
test eax, eax
setne al
mov byte [0x4459b8], al
test al, al
je 0x40c71a
push edi
push esi
call fcn.004213d9
pop ecx
pop ecx
jmp 0x40c9a4
test esi, esi
je 0x40c996
test edi, edi
je 0x40c996
push 0x43e4f4
push esi
call fcn.0042086d
pop ecx
pop ecx
test eax, eax
je 0x40c74b
call fcn.0042145d
mov dword [eax], 2
jmp 0x40c9a1
xor ecx, ecx
cmp word [esi + 2], 0x3a
jne 0x40c771
movzx eax, word [esi]
test ax, ax
je 0x40c762
cmp word [esi + 4], cx
je 0x40c73b
push eax
call fcn.00421539
movzx ebp, ax
pop ecx
sub ebp, 0x60
jmp 0x40c778
call fcn.00421579
mov ebp, eax
lea eax, [esp + 0x38]
push eax
push esi
call dword [sym.imp.KERNEL32.dll_FindFirstFileW]
mov ebx, eax
cmp ebx, 0xffffffff
jne 0x40c855
push 0x43e4fc
push esi
call fcn.0042086d
pop ecx
pop ecx
test eax, eax
jne 0x40c7f6
push ecx
lea eax, [esp + 0x28c]
mov edx, 0x104
push eax
mov ecx, esi
call fcn.0040c5ec
pop ecx
pop ecx
test eax, eax
je 0x40c7f6
lea eax, [esp + 0x288]
push eax
call fcn.0041f769
pop ecx
test eax, eax
jne 0x40c7dd
lea ecx, [esp + 0x288]
call fcn.0040c6bd
test eax, eax
je 0x40c7f6
lea ecx, [esp + 0x288]
push ecx
call dword [sym.imp.KERNEL32.dll_GetDriveTypeW]
xor ecx, ecx
inc ecx
cmp eax, ecx
ja 0x40c73b
push 0x10
pop ecx
xor edx, edx
mov dword [esp + 0x38], ecx
xor eax, eax
mov dword [esp + 0x54], edx
push ecx
mov word [esp + 0x68], ax
lea eax, [esp + 0x18]
push edx
push eax
mov dword [esp + 0x64], edx
call fcn.00419a80
mov eax, 0x7bc
lea ecx, [esp + 0x20]
mov word [esp + 0x20], ax
add esp, 0xc
xor eax, eax
inc eax
mov word [esp + 0x16], ax
mov word [esp + 0x1a], ax
xor eax, eax
mov dword [esp + 0x1c], eax
mov dword [esp + 0x20], eax
call fcn.004122b0
mov dword [edi + 0x24], eax
mov dword [edi + 0x20], eax
mov dword [edi + 0x28], eax
jmp 0x40c942
cmp dword [esp + 0x4c], 0
mov ecx, dword [sym.imp.KERNEL32.dll_FileTimeToLocalFileTime]
mov eax, dword [sym.imp.KERNEL32.dll_FileTimeToSystemTime]
mov dword [esp + 0x24], ecx
mov dword [esp + 0x10], eax
jne 0x40c87a
cmp dword [esp + 0x50], 0
jne 0x40c87a
xor eax, eax
jmp 0x40c8b1
lea eax, [esp + 0x14]
push eax
lea eax, [esp + 0x50]
push eax
call ecx
test eax, eax
je 0x40c980
lea eax, [esp + 0x28]
push eax
lea eax, [esp + 0x18]
push eax
call dword [esp + 0x18]
test eax, eax
je 0x40c980
lea ecx, [esp + 0x28]
call fcn.004122b0
mov ecx, dword [esp + 0x24]
mov dword [edi + 0x24], eax
cmp dword [esp + 0x44], 0
jne 0x40c8c2
cmp dword [esp + 0x48], 0
je 0x40c8f5
lea eax, [esp + 0x14]
push eax
lea eax, [esp + 0x48]
push eax
call ecx
test eax, eax
je 0x40c980
lea eax, [esp + 0x28]
push eax
lea eax, [esp + 0x18]
push eax
call dword [esp + 0x18]
test eax, eax
je 0x40c980
lea ecx, [esp + 0x28]
call fcn.004122b0
mov dword [edi + 0x20], eax
cmp dword [esp + 0x3c], 0
jne 0x40c90b
cmp dword [esp + 0x40], 0
jne 0x40c90b
mov eax, dword [edi + 0x24]
jmp 0x40c938
lea eax, [esp + 0x14]
push eax
lea eax, [esp + 0x40]
push eax
call dword [esp + 0x2c]
test eax, eax
je 0x40c980
lea eax, [esp + 0x28]
push eax
lea eax, [esp + 0x18]
push eax
call dword [esp + 0x18]
test eax, eax
je 0x40c980
lea ecx, [esp + 0x28]
call fcn.004122b0
push ebx
mov dword [edi + 0x28], eax
call dword [sym.imp.KERNEL32.dll_FindClose]
mov ecx, dword [esp + 0x38]
mov edx, esi
call fcn.0040c9af
xor ecx, ecx
mov word [edi + 6], ax
inc ecx
xor eax, eax
add eax, dword [esp + 0x58]
mov word [edi + 8], cx
mov ecx, dword [esp + 0x54]
adc ecx, 0
mov dword [edi + 0x18], eax
xor eax, eax
mov dword [edi + 0x1c], ecx
mov word [edi + 4], ax
mov dword [edi + 0xa], eax
lea eax, [ebp - 1]
mov dword [edi], eax
mov dword [edi + 0x10], eax
xor eax, eax
jmp 0x40c9a4
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
call fcn.00421427
pop ecx
push ebx
call dword [sym.imp.KERNEL32.dll_FindClose]
jmp 0x40c9a1
call fcn.0042145d
mov dword [eax], 0x16
or eax, 0xffffffff
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x48c
ret