Function at 0x40e5e0
Capabilities:
Get disk information

Disassembly:
mov rax, rsp
sub rsp, 0xa48
mov qword [rsp + 0x80], 0xfffffffffffffffe
mov qword [rax + 8], rbx
mov qword [rax + 0x10], rbp
mov qword [rax + 0x18], rsi
mov qword [rax + 0x20], rdi
mov qword [rax - 8], r12
mov qword [rax - 0x10], r13
mov rax, qword [0x0045f6c0]
xor rax, rsp
mov qword [rsp + 0xa20], rax
call fcn.00418c7c
mov r11, rax
xor r13d, r13d
mov ecx, r13d
test rax, rax
setne cl
test ecx, ecx
jne 0x40e643
mov ecx, 0x80004005
call fcn.00401000
int3
mov rax, qword [rax]
mov rcx, r11
call qword [rax + 0x18]
add rax, 0x18
mov qword [rsp + 0x50], rax
call fcn.00418c7c
mov r11, rax
mov ecx, r13d
test rax, rax
setne cl
test ecx, ecx
jne 0x40e675
mov ecx, 0x80004005
call fcn.00401000
int3
mov rax, qword [rax]
mov rcx, r11
call qword [rax + 0x18]
lea rbx, [rax + 0x18]
mov qword [rsp + 0x88], rbx
mov ecx, dword [0x0045400c]
sub ecx, 2
je 0x40e83d
sub ecx, 1
je 0x40e6b1
sub ecx, 1
je 0x40e6fb
cmp ecx, 1
je 0x40e749
jmp 0x40e8f5
lea rdx, [0x0044241c]
lea rcx, [0x00461000]
call fcn.004279c0
mov rdi, rax
test rax, rax
je 0x40e6fb
mov r8, rax
mov edx, 0x400
lea rcx, [rsp + 0x620]
call fcn.00428a90
mov rcx, rdi
call fcn.004275a0
movzx r11d, byte [rsp + 0x620]
mov byte [0x00454009], r11b
jmp 0x40e702
mov r11b, byte [0x00454009]
movsx r8d, r11b
lea rdx, str.._c:
lea rcx, [rsp + 0x300]
call fcn.00427fd0
lea rcx, [rsp + 0x300]
call fcn.004055f0
mov r8d, eax
lea rdx, [rsp + 0xf0]
lea rcx, str.Info_2_2_:___dp_volume__Find_the_CDRom__s_and_Send_rewind___d_n
call fcn.00404a90
mov ecx, 0x1388
call qword [sym.imp.KERNEL32.dll_Sleep]
mov rax, qword [0x004adba0]
mov rdi, rax
mov rsi, qword [0x004adba8]
cmp rax, rsi
jbe 0x40e772
call fcn.00426650
mov rsi, qword [0x004adba8]
mov rax, qword [0x004adba0]
lea r12, [0x004adb98]
mov qword [rsp + 0x60], r12
mov qword [rsp + 0x68], rdi
movaps xmm0, xmmword [rsp + 0x60]
movdqa xmmword [rsp + 0x60], xmm0
mov rbp, qword [rsp + 0x60]
mov rdi, qword [rsp + 0x68]
cmp rax, rsi
jbe 0x40e7a2
call fcn.00426650
test rbp, rbp
je 0x40e7ac
cmp rbp, r12
je 0x40e7b1
call fcn.00426650
cmp rdi, rsi
je 0x40e82d
test rbp, rbp
jne 0x40e7c0
call fcn.00426650
cmp rdi, qword [rbp + 0x10]
jb 0x40e7cb
call fcn.00426650
cmp qword [rdi + 0x20], 0x10
jb 0x40e7db
lea rsi, [rdi + 8]
mov rdx, qword [rsi]
jmp 0x40e7e2
lea rsi, [rdi + 8]
mov rdx, rsi
lea rcx, str.Info_2_3_:Check_fake_PID__s_whether_a_mass_storage_device_n
call fcn.00404a90
cmp rdi, qword [rbp + 0x10]
jb 0x40e7f9
call fcn.00426650
cmp qword [rdi + 0x20], 0x10
jb 0x40e803
mov rsi, qword [rsi]
mov rcx, rsi
call fcn.0040d930
cmp rdi, qword [rbp + 0x10]
jb 0x40e816
call fcn.00426650
add rdi, 0x28
mov rsi, qword [0x004adba8]
mov rax, qword [0x004adba0]
jmp 0x40e798
mov ecx, 0xbb8
call qword [sym.imp.KERNEL32.dll_Sleep]
jmp 0x40e8f5
mov dil, 0x61
movzx esi, dil
mov r8d, esi
lea rdx, [0x00443154]
lea rcx, [rsp + 0x510]
call fcn.00427fd0
mov r8d, 0x104
lea rdx, [rsp + 0xf0]
lea rcx, [rsp + 0x510]
call qword [sym.imp.KERNEL32.dll_QueryDosDeviceA]
test eax, eax
je 0x40e8dc
lea rcx, [rsp + 0xf0]
call fcn.00425420
lea rdx, str.cdrom
lea rcx, [rsp + 0xf0]
call fcn.00424e10
test rax, rax
je 0x40e8dc
mov r8d, esi
lea rdx, str.._c:
lea rcx, [rsp + 0x300]
call fcn.00427fd0
lea rcx, [rsp + 0x300]
call fcn.004055f0
mov r8d, eax
lea rdx, [rsp + 0xf0]
lea rcx, str.Info_2_1_:___dp_all_Find_the_CDRom__s_and_Send_rewind___d_n
call fcn.00404a90
add dil, 1
cmp dil, 0x7a
jbe 0x40e840
mov ecx, 0x1388
call qword [sym.imp.KERNEL32.dll_Sleep]
mov r9d, 4
xor r8d, r8d
xor edx, edx
xor ecx, ecx
call qword [sym.imp.SETUPAPI.dll_SetupDiGetClassDevsA]
mov rbp, rax
cmp rax, 0xffffffffffffffff
jne 0x40e963
lea rcx, str.Error_:_SetupDiGetClassDevs_error...
call fcn.00404a90
nop
lea rdx, [rbx - 0x18]
mov ebx, ebp
mov eax, ebp
lock xadd dword [rdx + 0x10], eax
add eax, ebp
test eax, eax
jg 0x40e93b
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rsp + 0x50]
add rdx, 0xffffffffffffffe8
lock xadd dword [rdx + 0x10], ebx
add ebx, 0xffffffff
test ebx, ebx
jg 0x40e959
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
mov eax, 0x4e26
jmp 0x40ed38
mov dword [rsp + 0xd0], 0x20
mov r12d, r13d
lea r8, [rsp + 0xd0]
xor edx, edx
mov rcx, rax
call qword [sym.imp.SETUPAPI.dll_SetupDiEnumDeviceInfo]
test eax, eax
je 0x40ecee
nop
mov rsi, r13
mov dword [rsp + 0x40], r13d
mov dword [rsp + 0x44], r13d
mov dword [rsp + 0x48], r13d
lea rax, [rsp + 0x40]
mov qword [rsp + 0x30], rax
mov dword [rsp + 0x28], r13d
mov qword [rsp + 0x20], r13
lea r9, [rsp + 0x4c]
mov r8d, 1
lea rdx, [rsp + 0xd0]
mov rcx, rbp
call qword [sym.imp.SETUPAPI.dll_SetupDiGetDeviceRegistryPropertyA]
test eax, eax
jne 0x40ea4b
call qword [sym.imp.KERNEL32.dll_GetLastError]
cmp eax, 0xd
je 0x40ecce
call qword [sym.imp.KERNEL32.dll_GetLastError]
cmp eax, 0x7a
jne 0x40ecce
test rsi, rsi
je 0x40ea02
mov rcx, rsi
call qword [sym.imp.KERNEL32.dll_LocalFree]
mov edx, dword [rsp + 0x40]
mov ecx, 0x40
call qword [sym.imp.KERNEL32.dll_LocalAlloc]
mov rsi, rax
lea rax, [rsp + 0x40]
mov qword [rsp + 0x30], rax
mov eax, dword [rsp + 0x40]
mov dword [rsp + 0x28], eax
mov qword [rsp + 0x20], rsi
lea r9, [rsp + 0x4c]
mov r8d, 1
lea rdx, [rsp + 0xd0]
mov rcx, rbp
call qword [sym.imp.SETUPAPI.dll_SetupDiGetDeviceRegistryPropertyA]
test eax, eax
je 0x40e9d6
mov rdi, rsi
cmp byte [rsi], 0
je 0x40ecc5
nop
nop
nop
mov eax, dword [rsp + 0x40]
add rax, rsi
cmp rdi, rax
jae 0x40ecc5
mov rcx, rdi
call fcn.00425420
xor edx, edx
mov rcx, rdi
call fcn.00401ab0
test eax, eax
je 0x40eb95
mov rdx, rdi
lea rcx, str.Info__:_Find_device__ID:__s..._n
call fcn.00404a90
xor edx, edx
mov r8d, 0xff
lea rcx, [rsp + 0x410]
call fcn.004255a0
lea r8, [rsp + 0x410]
lea rdx, [rsp + 0xd0]
mov rcx, rbp
call fcn.00402390
lea rdx, [0x004423cc]
lea rcx, [rsp + 0x410]
call fcn.00424e10
test rax, rax
je 0x40ecc5
xor edx, edx
mov r8d, 0xff
lea rcx, [rsp + 0x200]
call fcn.004255a0
lea r8, [rsp + 0x200]
lea rdx, [rsp + 0xd0]
mov rcx, rbp
call fcn.004063e0
lea rdx, str.usbstor
lea rcx, [rsp + 0x200]
call fcn.00424e10
test rax, rax
je 0x40ecc5
xor r9d, r9d
mov r8d, dword [rsp + 0xe4]
lea rdx, [rsp + 0x48]
lea rcx, [rsp + 0x44]
call qword [sym.imp.SETUPAPI.dll_CM_Get_DevNode_Status]
test eax, eax
je 0x40ecae
lea rdx, [rsp + 0x60]
lea rcx, [rsp + 0xd0]
mov rax, qword [rcx]
mov qword [rdx], rax
mov rax, qword [rcx + 8]
mov qword [rdx + 8], rax
mov rax, qword [rcx + 0x10]
mov qword [rdx + 0x10], rax
mov rax, qword [rcx + 0x18]
mov qword [rdx + 0x18], rax
lea rdx, [rsp + 0x60]
mov rcx, rbp
call fcn.00405520
test eax, eax
je 0x40ec95
jmp 0x40ec7a
lea rdx, str.vid_18d1
mov rcx, rdi
call fcn.00424e10
test rax, rax
je 0x40ecc5
xor r9d, r9d
mov r8d, dword [rsp + 0xe4]
lea rdx, [rsp + 0x48]
lea rcx, [rsp + 0x44]
call qword [sym.imp.SETUPAPI.dll_CM_Get_DevNode_Status]
test eax, eax
jne 0x40ec30
test byte [rsp + 0x44], 8
je 0x40ebe4
lea rcx, str.Info2:_This_Device_is_present__dont_remove__n
call fcn.00404a90
jmp 0x40ec7a
lea rdx, [rsp + 0xb0]
lea rcx, [rsp + 0xd0]
mov rax, qword [rcx]
mov qword [rdx], rax
mov rax, qword [rcx + 8]
mov qword [rdx + 8], rax
mov rax, qword [rcx + 0x10]
mov qword [rdx + 0x10], rax
mov rax, qword [rcx + 0x18]
mov qword [rdx + 0x18], rax
lea rdx, [rsp + 0xb0]
mov rcx, rbp
call fcn.00405520
lea rcx, str.Info2:_This_Device_is_present_But_not_started__remove_it__n
call fcn.00404a90
jmp 0x40ec7a
lea rdx, [rsp + 0x90]
lea rcx, [rsp + 0xd0]
mov rax, qword [rcx]
mov qword [rdx], rax
mov rax, qword [rcx + 8]
mov qword [rdx + 8], rax
mov rax, qword [rcx + 0x10]
mov qword [rdx + 0x10], rax
mov rax, qword [rcx + 0x18]
mov qword [rdx + 0x18], rax
lea rdx, [rsp + 0x90]
mov rcx, rbp
call fcn.00405520
lea rcx, str.Info2:_Cant_find_devnodes_status__Delete_this_device_n
call fcn.00404a90
mov rcx, rdi
call qword [sym.imp.KERNEL32.dll_lstrlenA]
movsxd rcx, eax
lea rdi, [rdi + rcx + 1]
cmp byte [rdi], 0
je 0x40ecc5
jmp 0x40ea60
lea r8, [rsp + 0x200]
mov rdx, rdi
lea rcx, str.Info_2_5_:_Cant_find__s__s__devnodes_status__Delete_this_device_n
call fcn.00404a90
jmp 0x40ecc5
lea r8, [rsp + 0x200]
mov rdx, rdi
lea rcx, str.Info_2_4_:_s__s__Device_is_present__dont_remove__n
call fcn.00404a90
mov rcx, rsi
call qword [sym.imp.KERNEL32.dll_LocalFree]
add r12d, 1
lea r8, [rsp + 0xd0]
mov edx, r12d
mov rcx, rbp
call qword [sym.imp.SETUPAPI.dll_SetupDiEnumDeviceInfo]
test eax, eax
jne 0x40e990
mov rcx, rbp
call qword [sym.imp.SETUPAPI.dll_SetupDiDestroyDeviceInfoList]
nop
lea rdx, [rbx - 0x18]
mov ebx, 0xffffffff
mov eax, ebx
lock xadd dword [rdx + 0x10], eax
add eax, ebx
test eax, eax
jg 0x40ed18
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rdx, qword [rsp + 0x50]
add rdx, 0xffffffffffffffe8
lock xadd dword [rdx + 0x10], ebx
add ebx, 0xffffffff
test ebx, ebx
jg 0x40ed36
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
xor eax, eax
mov rcx, qword [rsp + 0xa20]
xor rcx, rsp
call fcn.00425570
mov rbx, qword [rsp + 0xa50]
mov rbp, qword [rsp + 0xa58]
mov rsi, qword [rsp + 0xa60]
mov rdi, qword [rsp + 0xa68]
mov r12, qword [rsp + 0xa40]
mov r13, qword [rsp + 0xa38]
add rsp, 0xa48
ret