Function at 0x4010d0
Capabilities:
Get disk information
Get disk size
Resolve function by parsing pe exports

Disassembly:
sub esp, 0x6ac
mov eax, dword [0x417004]
xor eax, esp
mov dword [esp + 0x6a4], eax
push ebx
push ebp
push esi
mov esi, dword [0x4190e4]
push edi
mov edi, esi
call fcn.00401080
cmp eax, 0xffffffff
mov edi, dword [sym.imp.USER32.dll_SendMessageA]
mov byte [esp + 0x398], 0
je 0x401151
xor ecx, ecx
lea edx, [esp + 0x398]
mov dword [esp + 0x38], ecx
mov dword [esp + 0xa4], ecx
mov ecx, edx
mov dword [esp + 0x44], edx
lea edx, [esp + 0x9c]
push edx
push eax
push 0x102d
push esi
mov dword [esp + 0x40], 1
mov dword [esp + 0x44], eax
mov dword [esp + 0xc4], 0x104
mov dword [esp + 0xc0], ecx
call edi
push 0
push 0
push 0x1009
push esi
call edi
call dword [sym.imp.KERNEL32.dll_GetLogicalDrives]
push 1
mov dword [esp + 0x68], eax
xor ebx, ebx
call dword [sym.imp.KERNEL32.dll_SetErrorMode]
mov ebp, 3
mov dword [esp + 0x14], ebp
lea ebx, [ebx]
mov ecx, ebp
mov eax, 1
shl eax, cl
mov ecx, dword [esp + 0x64]
test ecx, eax
je 0x4014c6
lea edx, [ebp + 0x41]
push edx
lea eax, [esp + 0x214]
push 0x4123bc
push eax
call dword [sym.imp.USER32.dll_wsprintfA]
add esp, 0xc
lea ecx, [esp + 0x210]
push ecx
lea edx, [esp + 0x4a4]
push edx
call dword [sym.imp.KERNEL32.dll_lstrcpyA]
push 0x4123c0
lea eax, [esp + 0x214]
push eax
call dword [sym.imp.KERNEL32.dll_lstrcatA]
lea ecx, [esp + 0x210]
push ecx
call dword [sym.imp.KERNEL32.dll_GetDriveTypeA]
cmp eax, 2
jne 0x4014c6
lea eax, [esp + 0x30]
push eax
push 0
push 0x1007
lea edx, [esp + 0x4ac]
push esi
mov dword [esp + 0x40], 1
mov dword [esp + 0x44], ebx
mov dword [esp + 0x48], 0
mov dword [esp + 0x54], edx
call edi
push 0x7f
lea ecx, [esp + 0x31c]
push ecx
lea edx, [esp + 0x98]
push edx
lea eax, [esp + 0xa0]
push eax
lea ecx, [esp + 0xa8]
push ecx
push 0x103
lea edx, [esp + 0x5c0]
push edx
lea eax, [esp + 0x22c]
push eax
call dword [sym.imp.KERNEL32.dll_GetVolumeInformationA]
test eax, eax
jne 0x40126c
mov byte [esp + 0x5a8], al
mov byte [esp + 0x318], al
lea edx, [esp + 0x30]
push edx
push 0
push 0x1006
lea ecx, [esp + 0x5b4]
push esi
mov dword [esp + 0x48], 1
mov dword [esp + 0x54], ecx
call edi
lea eax, [esp + 0x318]
push eax
call dword [sym.imp.KERNEL32.dll_lstrlenA]
test eax, eax
je 0x401485
lea ecx, [esp + 0x68]
push ecx
lea edx, [esp + 0x24]
push edx
lea eax, [esp + 0x30]
push eax
lea ecx, [esp + 0x21c]
push ecx
call dword [sym.imp.KERNEL32.dll_GetDiskFreeSpaceExA]
test eax, eax
jne 0x4012dd
mov dword [esp + 0x28], eax
mov dword [esp + 0x2c], eax
mov dword [esp + 0x20], eax
mov dword [esp + 0x24], eax
mov dword [esp + 0x68], eax
mov dword [esp + 0x6c], eax
fld qword [0x412680]
fld qword [0x412678]
call fcn.0040a3f0
fst qword [esp + 0x88]
mov edx, dword [esp + 0x24]
fild dword [esp + 0x24]
test edx, edx
jge 0x401307
fadd qword [0x412670]
mov eax, dword [esp + 0x20]
fmulp st(1)
test eax, eax
fild dword [esp + 0x20]
jge 0x40131b
fadd qword [0x412670]
faddp st(1)
sub esp, 8
lea edx, [esp + 0x218]
fst qword [esp + 0x20]
fmul qword [0x412668]
fstp qword [esp]
push str._.0f
call fcn.00401cb0
add esp, 0xc
lea edx, [esp + 0x30]
push edx
push 0
push 0x1006
lea ecx, [esp + 0x21c]
push esi
mov dword [esp + 0x48], 2
mov dword [esp + 0x54], ecx
call edi
fldz
fld st(0)
fld qword [esp + 0x18]
fucom st(1)
fnstsw ax
fstp st(1)
test ah, 0x44
jnp 0x4013b5
mov eax, dword [esp + 0x2c]
fstp st(1)
test eax, eax
fild dword [esp + 0x2c]
jge 0x40138a
fadd qword [0x412670]
mov ecx, dword [esp + 0x28]
fmul qword [esp + 0x88]
test ecx, ecx
fild dword [esp + 0x28]
jge 0x4013a3
fadd qword [0x412670]
faddp st(1)
fmul qword [0x412658]
fdivrp st(1)
fadd qword [0x412650]
jmp 0x4013b7
fstp st(0)
sub esp, 8
fstp qword [esp]
push str._.2f
lea edx, [esp + 0x21c]
call fcn.00401cb0
add esp, 0xc
lea eax, [esp + 0x30]
push eax
push 0
push 0x1006
lea edx, [esp + 0x21c]
push esi
mov dword [esp + 0x48], 3
mov dword [esp + 0x54], edx
call edi
lea ecx, [esp + 0x4a0]
push ecx
lea edx, [esp + 0x214]
push edx
call dword [sym.imp.KERNEL32.dll_lstrcpyA]
push str.:_autorun.inf
lea eax, [esp + 0x214]
push eax
call dword [sym.imp.KERNEL32.dll_lstrcatA]
lea ecx, [esp + 0xd0]
push ecx
lea edx, [esp + 0x214]
push edx
call dword [sym.imp.KERNEL32.dll_FindFirstFileA]
mov ebp, eax
cmp ebp, 0xffffffff
jne 0x40144e
push str.clear
lea eax, [esp + 0x214]
push eax
call dword [sym.imp.KERNEL32.dll_lstrcpyA]
jmp 0x401481
test byte [esp + 0xd0], 0x10
je 0x401467
push str.protection_is_set
lea ecx, [esp + 0x214]
push ecx
jmp 0x401474
push str.autorun_exist_
lea edx, [esp + 0x214]
push edx
call dword [sym.imp.KERNEL32.dll_lstrcpyA]
push ebp
call dword [sym.imp.KERNEL32.dll_FindClose]
mov ebp, dword [esp + 0x14]
lea eax, [esp + 0x318]
push eax
mov dword [esp + 0x3c], 4
call dword [sym.imp.KERNEL32.dll_lstrlenA]
test eax, eax
jne 0x4014a9
mov dword [esp + 0x44], str.unpluged
jmp 0x4014b4
lea ecx, [esp + 0x210]
mov dword [esp + 0x44], ecx
lea edx, [esp + 0x30]
push edx
push 0
push 0x1006
push esi
call edi
add ebx, 1
add ebp, 1
cmp ebp, 0x20
mov dword [esp + 0x14], ebp
jb 0x401180
cmp ebx, 1
mov ebp, 2
jbe 0x40153b
xor eax, eax
lea ecx, [esp + 0x70]
push ecx
push 0xffffffffffffffff
mov dword [esp + 0x78], eax
mov dword [esp + 0x7c], eax
mov dword [esp + 0x80], eax
mov dword [esp + 0x84], eax
mov dword [esp + 0x88], eax
mov dword [esp + 0x8c], eax
push 0x100d
lea eax, [esp + 0x3a4]
push esi
mov dword [esp + 0x80], ebp
mov dword [esp + 0x84], eax
call edi
mov ebx, eax
add ebx, 1
cmp ebx, 1
ja 0x40153b
mov ebx, 1
jmp 0x40153f
test ebx, ebx
je 0x40157e
push 0x34
lea edx, [esp + 0x34]
push 0
push edx
call fcn.00405070
add esp, 0xc
lea eax, [esp + 0x30]
push eax
push 0
push 0x1006
add ebx, 0xffffffff
push esi
mov dword [esp + 0x40], 8
mov dword [esp + 0x44], ebx
mov dword [esp + 0x4c], ebp
mov dword [esp + 0x50], ebp
mov dword [esp + 0x48], 0
call edi
mov ecx, dword [esp + 0x6b4]
pop edi
pop esi
pop ebp
pop ebx
xor ecx, esp
call fcn.00401d23
add esp, 0x6ac
ret