Function at 0x4514d0
Capabilities:
Get disk information
Get disk size

Disassembly:
sub esp, 0x540
push ebx
push esi
mov esi, dword [esp + 0x54c]
mov ebx, ecx
mov dword [esp + 8], ebx
push edi
test esi, esi
je 0x451a09
cmp byte [esi], 0
je 0x451a09
push str.List
push esi
call fcn.004b626e
add esp, 8
test eax, eax
jne 0x45166d
mov eax, dword [0x4eceb0]
mov ecx, eax
push 1
push 0
push 0xffffffffffffffff
push 0
mov dword [esp + 0x20], eax
call fcn.004a2730
mov esi, dword [esp + 0x554]
cmp byte [esi], 0
jne 0x45153b
mov esi, 0x100
jmp 0x4515c2
push str.CDRom
push esi
call fcn.004b626e
add esp, 8
test eax, eax
jne 0x451552
lea esi, [eax + 5]
jmp 0x4515c2
push str.Removable
push esi
call fcn.004b626e
add esp, 8
test eax, eax
jne 0x451569
lea esi, [eax + 2]
jmp 0x4515c2
push str.Fixed
push esi
call fcn.004b626e
add esp, 8
test eax, eax
jne 0x451580
lea esi, [eax + 3]
jmp 0x4515c2
push str.Network
push esi
call fcn.004b626e
add esp, 8
test eax, eax
jne 0x451597
lea esi, [eax + 4]
jmp 0x4515c2
push str.Ramdisk
push esi
call fcn.004b626e
add esp, 8
test eax, eax
jne 0x4515ae
lea esi, [eax + 6]
jmp 0x4515c2
push str.Unknown
push esi
call fcn.004b626e
add esp, 8
test eax, eax
jne case.0x4517ec.71
xor esi, esi
push ebp
mov ebp, dword [sym.imp.KERNEL32.dll_GetDriveTypeA]
xor edi, edi
mov bl, 0x41
nop dword [eax]
lea eax, [esp + 0x150]
mov byte [esp + 0x150], bl
push eax
mov word [esp + 0x155], 0x5c3a
mov byte [esp + 0x157], 0
call ebp
cmp eax, esi
je 0x451604
cmp esi, 0x100
jne 0x451609
cmp eax, 1
je 0x451609
mov byte [esp + edi + 0x2c], bl
inc edi
inc bl
cmp bl, 0x5a
jbe 0x4515d0
mov ecx, dword [esp + 0x14]
lea eax, [esp + 0x2c]
push 1
push 0
push 0xffffffffffffffff
push eax
mov byte [esp + edi + 0x3c], 0
call fcn.004a2730
cmp byte [esp + 0x2c], 0
pop ebp
jne 0x451b1d
mov ebx, dword [esp + 0xc]
mov eax, dword [0x4e88cc]
test byte [eax + 0xe0], 1
jne 0x451b3f
mov ecx, dword [0x4eb720]
push 1
push 0
push 0xffffffffffffffff
push 0x4d9c00
call fcn.004a2730
pop edi
pop esi
pop ebx
add esp, 0x540
ret 8
push str.FileSystem
push esi
call fcn.004b626e
add esp, 8
test eax, eax
je 0x451a3d
push 0x4de6e0
push esi
call fcn.004b626e
add esp, 8
test eax, eax
je 0x451a3d
push str.Label
push esi
call fcn.004b626e
add esp, 8
test eax, eax
jne 0x4516b3
lea esi, [eax + 3]
jmp 0x451a42
push 9
push str.SetLabel:
push esi
call fcn.004b653e
add esp, 0xc
test eax, eax
jne 0x451756
push 0x102
push dword [esp + 0x558]
lea eax, [esp + 0x50]
push eax
call fcn.004ba990
lea ecx, [esp + 0x54]
mov byte [esp + 0x156], 0
add esp, 0xc
lea edx, [ecx + 1]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x4516f3
sub ecx, edx
je 0x45170a
cmp byte [esp + ecx + 0x47], 0x5c
je 0x45170a
mov byte [esp + ecx + 0x48], 0x5c
add esi, 9
nop dword [eax]
mov al, byte [esi]
cmp al, 0x20
je 0x45171a
cmp al, 9
jne 0x45171d
inc esi
jmp 0x451710
push esi
lea eax, [esp + 0x4c]
push eax
call dword [sym.imp.KERNEL32.dll_SetVolumeLabelA]
push 1
test eax, eax
mov edx, 0x4d9c00
push 0
mov ecx, 0x4d5290
cmove ecx, edx
push 0xffffffffffffffff
push ecx
mov ecx, dword [0x4eb720]
call fcn.004a2730
pop edi
pop esi
pop ebx
add esp, 0x540
ret 8
push str.Serial
push esi
call fcn.004b626e
add esp, 8
test eax, eax
jne 0x451770
lea esi, [eax + 5]
jmp 0x451a42
push str.Type
push esi
call fcn.004b626e
add esp, 8
test eax, eax
jne 0x45183b
mov esi, dword [0x4eceb0]
mov ecx, esi
push 1
push eax
push 0xffffffffffffffff
push eax
call fcn.004a2730
push 0x102
push dword [esp + 0x558]
lea eax, [esp + 0x50]
push eax
call fcn.004ba990
lea ecx, [esp + 0x54]
mov byte [esp + 0x156], 0
add esp, 0xc
lea edx, [ecx + 1]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x4517c1
sub ecx, edx
je 0x4517d8
cmp byte [esp + ecx + 0x47], 0x5c
je 0x4517d8
mov byte [esp + ecx + 0x48], 0x5c
lea eax, [esp + 0x48]
push eax
call dword [sym.imp.KERNEL32.dll_GetDriveTypeA]
cmp eax, 6
ja case.0x4517ec.71
jmp dword [eax*4 + 0x451b60]
mov eax, str.Unknown
mov ecx, esi
jmp 0x451b11
mov eax, str.Removable
mov ecx, esi
jmp 0x451b11
mov eax, str.Fixed
mov ecx, esi
jmp 0x451b11
mov eax, str.Network
mov ecx, esi
jmp 0x451b11
mov eax, str.CDROM
mov ecx, esi
jmp 0x451b11
mov eax, str.RAMDisk
mov ecx, esi
jmp 0x451b11
push str.Status
push esi
call fcn.004b626e
add esp, 8
test eax, eax
jne 0x45191f
mov esi, dword [0x4eceb0]
mov ecx, esi
push 1
push eax
push 0xffffffffffffffff
push eax
call fcn.004a2730
push 0x102
push dword [esp + 0x558]
lea eax, [esp + 0x50]
push eax
call fcn.004ba990
lea ecx, [esp + 0x54]
mov byte [esp + 0x156], 0
add esp, 0xc
lea edx, [ecx + 1]
nop dword [eax]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x451890
sub ecx, edx
je 0x4518a7
cmp byte [esp + ecx + 0x47], 0x5c
je 0x4518a7
mov byte [esp + ecx + 0x48], 0x5c
lea eax, [esp + 0xc]
push eax
lea eax, [esp + 0x18]
push eax
lea eax, [esp + 0x20]
push eax
lea eax, [esp + 0x28]
push eax
lea eax, [esp + 0x58]
push eax
call dword [sym.imp.KERNEL32.dll_GetDiskFreeSpaceA]
test eax, eax
jne case.0x4518dc.0
call dword [sym.imp.KERNEL32.dll_GetLastError]
cmp eax, 0x15
ja case.0x4518dc.1
movzx eax, byte [eax + 0x451b90]
jmp dword [eax*4 + 0x451b7c]
mov eax, str.Invalid
mov ecx, esi
jmp 0x451b11
mov eax, str.NotReady
mov ecx, esi
jmp 0x451b11
mov eax, str.ReadOnly
mov ecx, esi
jmp 0x451b11
mov eax, str.Unknown
mov ecx, esi
jmp 0x451b11
mov eax, str.Ready
mov ecx, esi
jmp 0x451b11
push str.StatusCD
push esi
call fcn.004b626e
add esp, 8
test eax, eax
jne 0x4519e5
mov ebx, dword [0x4eceb0]
mov ecx, ebx
push 1
push eax
push 0xffffffffffffffff
push eax
call fcn.004a2730
mov eax, dword [esp + 0x554]
cmp byte [eax], 0
jne 0x451972
push 0
push 0x80
lea eax, [esp + 0x1d4]
push eax
push str.status_cdaudio_mode
call dword [sym.imp.WINMM.dll_mciSendStringA]
test eax, eax
jmp 0x4519d1
push eax
push str.open__s_type_cdaudio_alias_cd_wait_shareable
lea eax, [esp + 0x254]
push 0x100
push eax
call fcn.0049e100
mov edi, dword [sym.imp.WINMM.dll_mciSendStringA]
lea eax, [esp + 0x25c]
add esp, 0x10
push 0
push 0
push 0
push eax
call edi
test eax, eax
jne 0x451635
push eax
push 0x80
lea eax, [esp + 0x1d4]
push eax
push str.status_cd_mode
call edi
push 0
push 0
push 0
push str.close_cd_wait
mov esi, eax
call edi
test esi, esi
jne 0x451635
lea eax, [esp + 0x1cc]
mov ecx, ebx
jmp 0x451b11
push str.Capacity
push esi
call fcn.004b626e
add esp, 8
test eax, eax
je 0x451a21
push 0x4de718
push esi
call fcn.004b626e
add esp, 8
test eax, eax
je 0x451a21
mov ecx, dword [0x4eceb0]
push 1
push 0
push 0xffffffffffffffff
push 0
call fcn.004a2730
jmp case.0x4517ec.71
push 0
push dword [esp + 0x558]
mov ecx, ebx
call fcn.00450fe0
pop edi
pop esi
pop ebx
add esp, 0x540
ret 8
mov esi, 2
mov edi, dword [0x4eceb0]
mov ecx, edi
mov byte [esp + 0xc], 1
push dword [esp + 0xc]
mov byte [esp + 0x14], 0
push dword [esp + 0x14]
push 0xffffffffffffffff
push 0
call fcn.004a2730
push 0x102
push dword [esp + 0x558]
lea eax, [esp + 0x50]
push eax
call fcn.004ba990
lea ecx, [esp + 0x54]
mov byte [esp + 0x156], 0
add esp, 0xc
lea edx, [ecx + 1]
nop dword [eax]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x451a90
sub ecx, edx
je 0x451aa7
cmp byte [esp + ecx + 0x47], 0x5c
je 0x451aa7
mov byte [esp + ecx + 0x48], 0x5c
push 0xff
lea eax, [esp + 0x450]
push eax
lea eax, [esp + 0x28]
push eax
lea eax, [esp + 0x30]
push eax
lea eax, [esp + 0x20]
push eax
push 0xff
lea eax, [esp + 0x364]
push eax
lea eax, [esp + 0x64]
push eax
call dword [sym.imp.KERNEL32.dll_GetVolumeInformationA]
test eax, eax
je case.0x4517ec.71
sub esi, 2
je 0x451b08
sub esi, 1
je 0x451aff
sub esi, 2
jne 0x451b1d
push dword [esp + 0x10]
mov ecx, edi
call fcn.004014c0
jmp 0x451b1d
lea eax, [esp + 0x34c]
jmp 0x451b0f
lea eax, [esp + 0x44c]
mov ecx, edi
push 1
push 0
push 0xffffffffffffffff
push eax
call fcn.004a2730
mov ecx, dword [0x4eb720]
push 1
push 0
push 0xffffffffffffffff
push 0x4d5290
call fcn.004a2730
pop edi
pop esi
pop ebx
add esp, 0x540
ret 8
push 0x4d5231
push 0
push 0x4d9c00
mov ecx, ebx
call fcn.0043e650
pop edi
pop esi
pop ebx
add esp, 0x540
ret 8