Function at 0x4012c7
Capabilities:
Get disk information
Read file on windows

Disassembly:
push ebp
lea ebp, [esp - 0x7f4]
sub esp, 0x874
mov eax, dword [0x45a90c]
xor eax, ebp
mov dword [ebp + 0x7f0], eax
push ebx
xor eax, eax
push esi
push edi
mov word [ebp + 0x7d0], ax
lea edi, [ebp + 0x7d2]
stosd dword es:[edi], eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
stosw word es:[edi], ax
mov dword [ebp - 0x68], 0x43
xor ebx, ebx
mov esi, 0x800
push dword [ebp - 0x68]
lea eax, [ebp + 0x7d0]
push str._c:_
push 0xa
push eax
call fcn.004323ee
add esp, 0x10
lea eax, [ebp + 0x7d0]
push eax
call dword [sym.imp.KERNEL32.dll_GetDriveTypeW]
cmp eax, 5
jne 0x401518
push dword [ebp - 0x68]
lea eax, [ebp + 0x7a8]
push str.._c:
push 0x14
push eax
call fcn.004323ee
add esp, 0x10
push ebx
push 0x28000004
push 3
push ebx
push 1
push SysReAllocStringLen
lea eax, [ebp + 0x7a8]
push eax
call dword [sym.imp.KERNEL32.dll_CreateFileW]
mov dword [ebp - 0x5c], eax
cmp eax, ebx
je 0x401518
mov dword [ebp - 0x64], 0x8000
mov dword [ebp - 0x60], ebx
mov eax, dword [ebp - 0x64]
add eax, dword [ebp - 0x60]
mov edi, dword [sym.imp.KERNEL32.dll_SetFilePointer]
push ebx
push ebx
push eax
push dword [ebp - 0x5c]
mov dword [ebp - 0x64], eax
call edi
push ebx
lea eax, [ebp - 0x80]
push eax
push esi
lea eax, [ebp - 0x58]
push eax
push dword [ebp - 0x5c]
call dword [sym.imp.KERNEL32.dll_ReadFile]
push 0x17
lea eax, [ebp - 0x51]
push str.EL_TORITO_SPECIFICATION
push eax
call fcn.00430d6e
add esp, 0xc
test eax, eax
je 0x4013d4
add dword [ebp - 0x60], esi
cmp dword [ebp - 0x60], 0x8000
jb 0x401382
jmp 0x40150f
mov eax, dword [ebp - 0x11]
cmp eax, ebx
je 0x40150f
push ebx
push ebx
shl eax, 0xb
push eax
push dword [ebp - 0x5c]
call edi
push ebx
lea eax, [ebp - 0x80]
push eax
push esi
lea eax, [ebp - 0x58]
push eax
push dword [ebp - 0x5c]
call dword [sym.imp.KERNEL32.dll_ReadFile]
movzx eax, byte [ebp - 0x37]
mov edi, dword [ebp - 0x30]
shl edi, 0xb
mov dword [ebp - 0x64], 0x10
cmp eax, 2
jne 0x401419
add edi, 0x164000
cmp eax, 4
jne 0x401425
mov dword [ebp - 0x64], 0x2200
mov dword [ebp - 0x7c], ebx
cmp dword [ebp - 0x64], ebx
jbe 0x40150f
mov eax, dword [ebp + 0x7fc]
mov dword [ebp - 0x78], eax
shr dword [ebp - 0x78], 0x18
mov dword [ebp - 0x70], eax
shr dword [ebp - 0x70], 0x10
mov dword [ebp - 0x60], eax
shr dword [ebp - 0x60], 8
push ebx
push ebx
push edi
push dword [ebp - 0x5c]
call dword [sym.imp.KERNEL32.dll_SetFilePointer]
push ebx
lea eax, [ebp - 0x80]
push eax
push esi
lea eax, [ebp - 0x58]
push eax
push dword [ebp - 0x5c]
add edi, esi
call dword [sym.imp.KERNEL32.dll_ReadFile]
mov al, byte [ebp + 0x7fc]
mov dl, byte [ebp - 0x60]
mov cl, byte [ebp - 0x70]
mov byte [ebp + 0x7e6], al
mov al, byte [ebp - 0x78]
mov byte [ebp + 0x7e9], al
mov byte [ebp + 0x7ea], al
mov al, byte [ebp + 0x7fc]
mov byte [ebp + 0x7ed], al
lea eax, [ebp + 0x19c]
mov byte [ebp + 0x7e4], bl
mov byte [ebp + 0x7e5], 0xff
mov byte [ebp + 0x7ee], 0xff
mov byte [ebp + 0x7ef], bl
mov byte [ebp + 0x7e7], dl
mov byte [ebp + 0x7e8], cl
mov byte [ebp + 0x7eb], cl
mov byte [ebp + 0x7ec], dl
mov dword [ebp - 0x6c], ebx
mov dword [ebp - 0x74], eax
push 0xa
lea eax, [ebp + 0x7e4]
push eax
push dword [ebp - 0x74]
call fcn.00430d6e
add esp, 0xc
test eax, eax
je 0x40153f
inc dword [ebp - 0x6c]
add dword [ebp - 0x74], 0x200
cmp dword [ebp - 0x6c], 4
jb 0x4014d8
inc dword [ebp - 0x7c]
mov eax, dword [ebp - 0x7c]
cmp eax, dword [ebp - 0x64]
jb 0x40144c
push dword [ebp - 0x5c]
call dword [sym.imp.KERNEL32.dll_CloseHandle]
inc dword [ebp - 0x68]
cmp dword [ebp - 0x68], 0x5c
jb 0x401308
xor al, al
mov ecx, dword [ebp + 0x7f0]
pop edi
pop esi
xor ecx, ebp
pop ebx
call fcn.0043242d
add ebp, 0x7f4
leave
ret
push dword [ebp - 0x5c]
call dword [sym.imp.KERNEL32.dll_CloseHandle]
mov al, 1
jmp 0x401527