Function at 0x405820
Capabilities:
Get disk information

Disassembly:
mov eax, dword fs:[0]
push 0xffffffffffffffff
push 0x431835
push eax
movsx eax, byte [esp + 0x10]
mov dword fs:[0], esp
sub esp, 0x90
push ebx
push ebp
push esi
push edi
push eax
lea eax, [esp + 0x90]
push str.__c:
mov ebp, ecx
push eax
call dword [sym.imp.MSVCRT.dll_sprintf]
add esp, 0xc
lea ecx, [esp + 0x8c]
push 0
push 0
push 3
push 0
push 3
push 0
push ecx
call fcn.00419150
mov ecx, eax
call fcn.0041b4b0
mov esi, eax
cmp esi, 0xffffffff
jne 0x405898
push eax
call fcn.00419150
mov ecx, eax
call fcn.0041b350
or eax, esi
jmp 0x405d6d
mov dl, byte [esp + 0x27]
push 0
lea ecx, [esp + 0x18]
mov byte [esp + 0x18], dl
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
mov edi, 0x438a68
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
push 0x438a68
lea ecx, [esp + 0x1c]
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::assign_char_const___unsigned_int_]
lea eax, [esp + 0x28]
push 0
push eax
lea ecx, [esp + 0x88]
push 0xc
push ecx
push 0
push 0
push 0x2d1080
push esi
mov dword [esp + 0xc8], 0
call fcn.00419150
mov ecx, eax
call fcn.0041b140
test eax, eax
je 0x405a2e
mov ecx, dword [ebp + 0x18]
mov eax, dword [ecx]
cmp eax, ecx
mov dword [esp + 0x10], eax
je 0x405c6c
mov dl, byte [eax + 0xc]
lea esi, [eax + 0xc]
push 0
lea ecx, [esp + 0x38]
mov byte [esp + 0x38], dl
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
mov eax, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
mov ecx, dword [eax]
push ecx
push 0
push esi
lea ecx, [esp + 0x40]
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::assign_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const___unsigned_int__unsigned_int_]
mov eax, dword [esp + 0x38]
mov byte [esp + 0xa8], 1
test eax, eax
jne 0x405956
mov eax, dword [sym.imp.MSVCP60.dll_char_const__private:_static_char_const____cdecl_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Nullstr_void_::_2::_C]
push 0
push 0
push 3
push 0
push 3
push 0
push eax
call fcn.00419150
mov ecx, eax
call fcn.0041b4b0
mov esi, eax
cmp esi, 0xffffffff
je 0x4059ba
lea edx, [esp + 0x2c]
push 0
push edx
lea eax, [esp + 0x7c]
push 0xc
push eax
push 0
push 0
push 0x2d1080
push esi
call fcn.00419150
mov ecx, eax
call fcn.0041b140
test eax, eax
je 0x4059ad
mov ecx, dword [esp + 0x78]
mov eax, dword [esp + 0x84]
cmp ecx, eax
je 0x4059eb
push esi
call fcn.00419150
mov ecx, eax
call fcn.0041b350
push 1
lea ecx, [esp + 0x38]
mov byte [esp + 0xac], 0
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
lea ecx, [esp + 0x10]
call fcn.00406cf0
mov eax, dword [esp + 0x10]
mov ecx, dword [ebp + 0x18]
cmp eax, ecx
jne 0x405916
jmp 0x405c6c
mov edx, dword [esp + 0x10]
mov ecx, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
lea eax, [edx + 0x1c]
mov edx, dword [ecx]
push edx
push 0
push eax
lea ecx, [esp + 0x20]
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::assign_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const___unsigned_int__unsigned_int_]
push esi
call fcn.00419150
mov ecx, eax
call fcn.0041b350
push 1
lea ecx, [esp + 0x38]
mov byte [esp + 0xac], 0
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
jmp 0x405c6c
mov ecx, 8
xor eax, eax
lea edi, [esp + 0x34]
push eax
rep stosd dword es:[edi], eax
lea eax, [esp + 0x2c]
lea ecx, [esp + 0x38]
push eax
push 0x20
push ecx
push 0
push 0
push 0x560000
push esi
call fcn.00419150
mov ecx, eax
call fcn.0041b140
test eax, eax
jne 0x405a8e
push esi
call fcn.00419150
mov ecx, eax
call fcn.0041b350
push 1
lea ecx, [esp + 0x18]
mov dword [esp + 0xac], 0xffffffff
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
or eax, 0xffffffff
jmp 0x405d6d
mov ecx, dword [ebp + 0x18]
mov eax, dword [ecx]
cmp eax, ecx
mov dword [esp + 0x10], eax
je 0x405c6c
mov eax, dword [eax + 0x10]
test eax, eax
jne 0x405aab
mov eax, dword [sym.imp.MSVCP60.dll_char_const__private:_static_char_const____cdecl_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Nullstr_void_::_2::_C]
push 0
push 0
push 3
push 0
push 3
push 0
push eax
call fcn.00419150
mov ecx, eax
call fcn.0041b4b0
mov ebx, eax
cmp ebx, 0xffffffff
je 0x405b48
mov ecx, 8
xor eax, eax
lea edi, [esp + 0x54]
lea edx, [esp + 0x28]
rep stosd dword es:[edi], eax
push eax
push edx
lea eax, [esp + 0x5c]
push 0x20
push eax
push 0
push 0
push 0x560000
push ebx
call fcn.00419150
mov ecx, eax
call fcn.0041b140
test eax, eax
je 0x405b3b
mov ecx, dword [esp + 0x34]
mov eax, dword [esp + 0x54]
cmp ecx, eax
jne 0x405b3b
mov edx, dword [esp + 0x44]
mov eax, dword [esp + 0x64]
cmp edx, eax
jne 0x405b3b
mov eax, dword [esp + 0x48]
mov ecx, dword [esp + 0x68]
cmp eax, ecx
jne 0x405b3b
mov ecx, dword [esp + 0x4c]
mov eax, dword [esp + 0x6c]
cmp ecx, eax
jne 0x405b3b
mov edx, dword [esp + 0x50]
mov eax, dword [esp + 0x70]
cmp edx, eax
je 0x405b93
push ebx
call fcn.00419150
mov ecx, eax
call fcn.0041b350
mov eax, dword [esp + 0x10]
mov edx, dword [0x438a74]
mov ecx, dword [eax + 8]
cmp ecx, edx
je 0x405b64
push ecx
call fcn.00407010
add esp, 4
jmp 0x405b81
mov ecx, dword [eax + 4]
cmp eax, dword [ecx + 8]
jne 0x405b7a
mov eax, ecx
mov dword [esp + 0x10], eax
mov ecx, dword [ecx + 4]
cmp eax, dword [ecx + 8]
je 0x405b6c
cmp dword [eax + 8], ecx
je 0x405b85
mov eax, ecx
mov dword [esp + 0x10], eax
cmp eax, dword [ebp + 0x18]
jne 0x405a9f
jmp 0x405c6c
mov eax, dword [esp + 0x10]
mov ecx, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
lea esi, [eax + 0x1c]
mov eax, dword [ecx]
mov ecx, dword [esi + 8]
mov ebp, ecx
cmp eax, ebp
jae 0x405bad
mov ebp, eax
lea edx, [esp + 0x14]
cmp edx, esi
jne 0x405bd4
push eax
push ebp
lea ecx, [esp + 0x1c]
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::erase_unsigned_int__unsigned_int_]
push 0
push 0
lea ecx, [esp + 0x1c]
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::erase_unsigned_int__unsigned_int_]
jmp 0x405c5f
test ebp, ebp
jbe 0x405c22
cmp ebp, ecx
jne 0x405c22
mov eax, dword [esi + 4]
test eax, eax
jne 0x405be8
mov eax, dword [sym.imp.MSVCP60.dll_char_const__private:_static_char_const____cdecl_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Nullstr_void_::_2::_C]
cmp byte [eax - 1], 0xfe
jae 0x405c22
push 1
lea ecx, [esp + 0x18]
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
mov eax, dword [esi + 4]
test eax, eax
jne 0x405c06
mov eax, dword [sym.imp.MSVCP60.dll_char_const__private:_static_char_const____cdecl_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Nullstr_void_::_2::_C]
mov dword [esp + 0x18], eax
mov ecx, dword [esi + 8]
mov dword [esp + 0x1c], ecx
mov edx, dword [esi + 0xc]
mov dword [esp + 0x20], edx
mov cl, byte [eax - 1]
inc cl
mov byte [eax - 1], cl
jmp 0x405c5f
push 1
push ebp
lea ecx, [esp + 0x1c]
call dword [sym.imp.MSVCP60.dll_private:_bool___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Grow_unsigned_int__bool_]
test al, al
je 0x405c5f
mov esi, dword [esi + 4]
test esi, esi
jne 0x405c40
mov esi, dword [sym.imp.MSVCP60.dll_char_const__private:_static_char_const____cdecl_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Nullstr_void_::_2::_C]
mov edi, dword [esp + 0x18]
mov ecx, ebp
mov eax, ecx
push ebp
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea ecx, [esp + 0x18]
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Eos_unsigned_int_]
push ebx
call fcn.00419150
mov ecx, eax
call fcn.0041b350
movsx eax, byte [esp + 0xb0]
push eax
lea ecx, [esp + 0x34]
push str._c:_
push ecx
or esi, 0xffffffff
call dword [sym.imp.MSVCRT.dll_sprintf]
mov eax, dword [esp + 0x28]
add esp, 0xc
test eax, eax
je 0x405d41
lea edx, [esp + 0x30]
push edx
call dword [sym.imp.KERNEL32.dll_GetDriveTypeA]
cmp eax, 2
jne 0x405cae
mov esi, eax
jmp 0x405d41
mov edi, 0x437194
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
mov esi, ecx
mov dword [esp + 0x2c], esi
je 0x405d32
mov ebp, dword [esp + 0x1c]
test ebp, ebp
jbe 0x405d2a
cmp esi, ebp
ja 0x405d2a
movsx ecx, byte [0x437194]
mov ebx, dword [esp + 0x18]
mov eax, 1
sub eax, esi
add ebp, eax
push ebp
push ecx
push ebx
call dword [sym.imp.MSVCRT.dll_memchr]
add esp, 0xc
test eax, eax
je 0x405d2a
jmp 0x405cfb
mov esi, dword [esp + 0x2c]
mov ecx, esi
mov edi, 0x437194
mov esi, eax
xor edx, edx
repe cmpsb byte [esi], byte es:[edi]
je 0x405d5b
sub ebx, eax
lea ebp, [ebx + ebp - 1]
lea ebx, [eax + 1]
movsx eax, byte [0x437194]
push ebp
push eax
push ebx
call dword [sym.imp.MSVCRT.dll_memchr]
add esp, 0xc
test eax, eax
jne 0x405cf7
mov ecx, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
mov eax, dword [ecx]
mov ecx, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
xor edx, edx
cmp eax, dword [ecx]
setne dl
mov esi, edx
mov ecx, dword [esp + 0x18]
test ecx, ecx
je 0x405d6b
mov al, byte [ecx - 1]
test al, al
je 0x405d61
cmp al, 0xff
je 0x405d61
dec al
mov byte [ecx - 1], al
jmp 0x405d6b
sub eax, dword [esp + 0x18]
jmp 0x405d32
dec ecx
push ecx
call sub.MFC42.DLL_operatordelete
add esp, 4
mov eax, esi
mov ecx, dword [esp + 0xa0]
pop edi
pop esi
pop ebp
pop ebx
mov dword fs:[0], ecx
add esp, 0x9c
ret 4