Function at 0x3001ef1d
Capabilities:
Get disk information via ioctl

Disassembly:
sub esp, 0x60
mov eax, dword [0x30034be8]
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 0x3000bd40
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 0x3001ef85
call ebp
mov esi, eax
cmp esi, ebx
jle 0x3001ef7f
and esi, 0xffff
or esi, 0x80070000
cmp esi, ebx
jl 0x3001f13f
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 0x3001f10e
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 0x3001f016
mov eax, dword [esp + 0x20]
cmp eax, ebx
je 0x3001f016
push 1
add eax, 4
push eax
call fcn.3001f1eb
mov edi, eax
cmp edi, ebx
mov dword [esp + 0x10], edi
jne 0x3001f00e
call ebp
mov esi, eax
cmp esi, ebx
jle 0x3001f008
and esi, 0xffff
or esi, 0x80070000
cmp esi, ebx
jl 0x3001f137
mov dword [edi], 6
jmp 0x3001f036
call ebp
mov esi, eax
cmp esi, ebx
jle 0x3001f02c
and esi, 0xffff
or esi, 0x80070000
cmp esi, ebx
jl 0x3001f137
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 0x3001f070
call ebp
mov esi, eax
cmp esi, ebx
jle 0x3001f06a
and esi, 0xffff
or esi, 0x80070000
cmp esi, ebx
jl 0x3001f137
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 0x3001f0ad
call ebp
mov esi, eax
cmp esi, ebx
jle 0x3001f0a7
and esi, 0xffff
or esi, 0x80070000
cmp esi, ebx
jl 0x3001f137
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 0x3001f0e4
call ebp
mov esi, eax
cmp esi, ebx
jle 0x3001f0e2
and esi, 0xffff
or esi, 0x80070000
cmp esi, ebx
jl 0x3001f137
mov eax, dword [esp + 0x2c]
cmp eax, dword [esp + 0x74]
je 0x3001f128
cmp dword [esp + 0x10], ebx
je 0x3001f101
push dword [esp + 0x10]
call fcn.3001f22f
mov dword [esp + 0x10], ebx
inc dword [esp + 0x1c]
lea eax, [esp + 0x34]
push eax
push dword [esp + 0x20]
push 0x3000bd40
push ebx
push dword [esp + 0x24]
call dword [sym.imp.SETUPAPI.dll_SetupDiEnumDeviceInterfaces]
test eax, eax
jne 0x3001efa4
jmp 0x3001f137
push dword [esp + 0x64]
call fcn.3001eec8
mov ecx, dword [esp + 0x78]
mov dword [ecx], eax
cmp dword [esp + 0x14], 0xffffffff
pop edi
jne 0x3001f147
push 0xffffffffffffffff
call dword [sym.imp.SETUPAPI.dll_SetupDiDestroyDeviceInfoList]
cmp dword [esp + 0xc], ebx
je 0x3001f156
push dword [esp + 0xc]
call fcn.3001f22f
cmp dword [esp + 0x14], 0xffffffff
je 0x3001f167
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.3001f57d
add esp, 0x60
ret 8