Function at 0x49ff3c
Capabilities:
Get disk size

Disassembly:
push ebx
push esi
push edi
push ebp
add esp, 0xffffff94
mov esi, edx
mov ebx, eax
mov byte [esp], 1
movsx edi, bl
mov eax, edi
add eax, 0x40
mov byte [esp + 1], al
mov byte [esp + 2], 0x3a
mov byte [esp + 3], 0x5c
mov byte [esp + 4], 0
mov eax, dword [0x4be4fc]
lea edx, [eax + edi - 1]
lea ecx, [esi + 0x73]
mov eax, ebx
call fcn.0049e43c
test al, al
jne 0x49ff86
mov byte [esp], 0
jmp 0x4a01cd
movsx eax, bl
mov edx, dword [0x4be4fc]
cmp byte [edx + eax - 1], 3
jne 0x49ffa4
mov eax, dword [0x4be450]
cmp byte [eax], 0
je 0x4a0050
movsx eax, bl
mov edx, dword [0x4be4fc]
cmp byte [edx + eax - 1], 4
jne 0x49ffc2
mov eax, dword [0x4be74c]
cmp byte [eax], 0
jne 0x4a0050
lea eax, [esp + 0x14]
push eax
lea eax, [esp + 0x14]
push eax
lea eax, [esp + 0x14]
push eax
lea eax, [esp + 0x14]
push eax
lea eax, [esp + 0x11]
push eax
call sub.kernel32.dll_GetDiskFreeSpaceA
cmp eax, 1
sbb eax, eax
inc eax
mov byte [esp], al
cmp byte [esp], 0
je 0x4a0010
mov ax, word [esp + 8]
mov word [esi + 2], ax
mov ax, word [esp + 0xc]
mov word [esi], ax
mov eax, dword [esp + 0x10]
mov dword [esi + 8], eax
mov eax, dword [esp + 0x14]
mov dword [esi + 4], eax
jmp 0x4a0029
call sub.kernel32.dll_GetLastError_1
call fcn.004ae200
mov eax, dword [0x4bedb0]
mov edx, 1
call fcn.004b12a8
mov eax, dword [0x4be784]
cmp byte [eax + 0x198d], 0
je 0x4a0104
cmp word [esi], 0x800
jne 0x4a0104
mov word [esi], 0x930
jmp 0x4a0104
push 0
push 0x80
push 3
push 0
push 3
push 0x80000000
push 0x4bdd3c
call sub.kernel32.dll_CreateFileA_1
mov edi, eax
cmp edi, 0xffffffff
je 0x4a0104
mov bp, 0x2c
lea eax, [esp + 0x1d]
mov edx, 0x2c
call fcn.004066e4
mov dword [esp + 0x58], 0x7303
movzx eax, bp
mov dword [esp + 0x54], eax
lea eax, [esp + 1]
mov dword [esp + 0x50], eax
lea eax, [esp + 0x1d]
mov dword [esp + 0x5c], eax
push 0
lea eax, [esp + 0x1c]
push eax
push 0x1c
lea eax, [esp + 0x58]
push eax
push 0x1c
lea eax, [esp + 0x60]
push eax
push 6
push edi
call sub.kernel32.dll_DeviceIoControl
test eax, eax
je 0x4a00d0
test byte [esp + 0x64], 1
je 0x4a00d4
xor eax, eax
jmp 0x4a00d6
mov al, 1
mov byte [esp], al
push edi
call sub.kernel32.dll_CloseHandle_1
cmp byte [esp], 0
je 0x4a0104
mov ax, word [esp + 0x25]
mov word [esi], ax
mov ax, word [esp + 0x21]
mov word [esi + 2], ax
mov eax, dword [esp + 0x29]
mov dword [esi + 8], eax
mov eax, dword [esp + 0x2d]
mov dword [esi + 4], eax
mov eax, dword [0x4be450]
cmp byte [eax], 0
jne 0x4a013a
movsx eax, bl
mov edx, dword [0x4be4fc]
cmp byte [edx + eax - 1], 4
jne 0x4a013a
call fcn.00413374
test al, al
je 0x4a0136
lea edx, [esp + 0x1c]
mov eax, ebx
call fcn.00413840
test al, al
jne 0x4a013a
mov byte [esp], 0
cmp dword [esi + 4], 0
jne 0x4a0156
cmp word [esi], 0x7d0
jbe 0x4a0150
mov dword [esi + 4], 0x530a8
jmp 0x4a0156
mov byte [esp], 0
jmp 0x4a01cd
mov eax, dword [0x4bea80]
cmp dword [eax], 0
jbe 0x4a0173
mov eax, dword [0x4bea80]
mov eax, dword [eax]
mov dword [esi + 4], eax
mov eax, dword [0x4bea80]
xor edx, edx
mov dword [eax], edx
movzx eax, word [esi]
movzx edx, word [esi + 2]
imul edx
mov dword [esi + 0x18], eax
movsx edi, bl
mov eax, dword [0x4becf0]
mov dx, word [esi]
mov word [eax + edi*2 + 0x54], dx
mov eax, dword [esi + 4]
call fcn.004aef80
movzx eax, word [esi + 2]
mov dword [esp + 0x68], eax
fild dword [esp + 0x68]
fmulp st(1)
add esp, 0xfffffff4
fstp xword [esp]
wait
call fcn.004aefa8
mov edx, dword [0x4be408]
mov dword [edx + edi*4 + 0xa8], eax
push 0
lea ecx, [esi + 0xc]
lea edx, [esi + 0x70]
mov eax, ebx
call fcn.0049e91c
mov al, byte [esp]
add esp, 0x6c
pop ebp
pop edi
pop esi
pop ebx
ret