Function at 0x3001f707
Capabilities:
Get disk information via ioctl

Disassembly:
sub esp, 0x60
mov eax, dword [0x30034b3c]
or dword [esp + 8], 0xffffffff
push ebx
push ebp
push esi
xor ebx, ebx
push 0x12
push ebx
mov dword [esp + 0x70], eax
mov eax, dword [esp + 0x7c]
push ebx
push 0x3000c3a8
xor esi, esi
mov dword [esp + 0x28], ebx
mov dword [esp + 0x30], ebx
mov dword [esp + 0x1c], ebx
mov dword [esp + 0x2c], ebx
mov dword [eax], ebx
call dword [sym.imp.SETUPAPI.dll_SetupDiGetClassDevsW]
cmp eax, 0xffffffff
mov ebp, dword [sym.imp.KERNEL32.dll_GetLastError]
mov dword [esp + 0x10], eax
jne 0x3001f76f
call ebp
mov esi, eax
cmp esi, ebx
jle 0x3001f769
and esi, 0xffff
or esi, 0x80070000
cmp esi, ebx
jl 0x3001f929
push edi
push 7
pop ecx
xor eax, eax
lea edi, [esp + 0x34]
rep stosd dword es:[edi], eax
lea eax, [esp + 0x34]
push eax
mov dword [esp + 0x38], 0x1c
push ebx
jmp 0x3001f8f8
push 7
pop ecx
xor eax, eax
push ebx
lea edi, [esp + 0x54]
rep stosd dword es:[edi], eax
lea eax, [esp + 0x24]
push eax
push ebx
push ebx
lea eax, [esp + 0x44]
push eax
push dword [esp + 0x28]
mov dword [esp + 0x68], 0x1c
call dword [sym.imp.SETUPAPI.dll_SetupDiGetDeviceInterfaceDetailW]
call ebp
cmp eax, 0x7a
jne 0x3001f800
mov eax, dword [esp + 0x20]
cmp eax, ebx
je 0x3001f800
push 1
add eax, 4
push eax
call fcn.3001f9d5
mov edi, eax
cmp edi, ebx
mov dword [esp + 0x10], edi
jne 0x3001f7f8
call ebp
mov esi, eax
cmp esi, ebx
jle 0x3001f7f2
and esi, 0xffff
or esi, 0x80070000
cmp esi, ebx
jl 0x3001f921
mov dword [edi], 6
jmp 0x3001f820
call ebp
mov esi, eax
cmp esi, ebx
jle 0x3001f816
and esi, 0xffff
or esi, 0x80070000
cmp esi, ebx
jl 0x3001f921
mov edi, dword [esp + 0x10]
lea eax, [esp + 0x50]
push eax
push ebx
push dword [esp + 0x28]
lea eax, [esp + 0x40]
push edi
push eax
push dword [esp + 0x28]
call dword [sym.imp.SETUPAPI.dll_SetupDiGetDeviceInterfaceDetailW]
test eax, eax
jne 0x3001f85a
call ebp
mov esi, eax
cmp esi, ebx
jle 0x3001f854
and esi, 0xffff
or esi, 0x80070000
cmp esi, ebx
jl 0x3001f921
push ebx
push ebx
push 3
push ebx
push 3
push SysReAllocString
add edi, 4
push edi
call dword [sym.imp.KERNEL32.dll_CreateFileW]
mov edi, eax
cmp edi, 0xffffffff
mov dword [esp + 0x18], edi
jne 0x3001f897
call ebp
mov esi, eax
cmp esi, ebx
jle 0x3001f891
and esi, 0xffff
or esi, 0x80070000
cmp esi, ebx
jl 0x3001f921
push ebx
lea eax, [esp + 0x28]
push eax
push 0xc
lea eax, [esp + 0x34]
push eax
push ebx
push ebx
push 0x2d1080
push edi
call dword [sym.imp.KERNEL32.dll_DeviceIoControl]
test eax, eax
jne 0x3001f8ce
call ebp
mov esi, eax
cmp esi, ebx
jle 0x3001f8cc
and esi, 0xffff
or esi, 0x80070000
cmp esi, ebx
jl 0x3001f921
mov eax, dword [esp + 0x2c]
cmp eax, dword [esp + 0x74]
je 0x3001f912
cmp dword [esp + 0x10], ebx
je 0x3001f8eb
push dword [esp + 0x10]
call fcn.3001fa19
mov dword [esp + 0x10], ebx
inc dword [esp + 0x1c]
lea eax, [esp + 0x34]
push eax
push dword [esp + 0x20]
push 0x3000c3a8
push ebx
push dword [esp + 0x24]
call dword [sym.imp.SETUPAPI.dll_SetupDiEnumDeviceInterfaces]
test eax, eax
jne 0x3001f78e
jmp 0x3001f921
push dword [esp + 0x64]
call fcn.3001f6b2
mov ecx, dword [esp + 0x78]
mov dword [ecx], eax
cmp dword [esp + 0x14], 0xffffffff
pop edi
jne 0x3001f931
push 0xffffffffffffffff
call dword [sym.imp.SETUPAPI.dll_SetupDiDestroyDeviceInfoList]
cmp dword [esp + 0xc], ebx
je 0x3001f940
push dword [esp + 0xc]
call fcn.3001fa19
cmp dword [esp + 0x14], 0xffffffff
je 0x3001f951
push dword [esp + 0x14]
call dword [sym.imp.KERNEL32.dll_CloseHandle]
mov ecx, dword [esp + 0x68]
mov eax, esi
pop esi
pop ebp
pop ebx
call fcn.3001fd67
add esp, 0x60
ret 8