Function at 0x409d30
Capabilities:
Get disk information

Disassembly:
push 0xffffffffffffffff
push 0x42bea6
mov eax, dword fs:[0]
push eax
sub esp, 0x94c
mov eax, dword [0x441dac]
xor eax, esp
mov dword [esp + 0x948], eax
push ebx
push ebp
push esi
push edi
mov eax, dword [0x441dac]
xor eax, esp
push eax
lea eax, [esp + 0x960]
mov dword fs:[0], eax
call fcn.0040f911
xor ecx, ecx
xor ebp, ebp
cmp eax, ebp
setne cl
cmp ecx, ebp
jne 0x409d87
push 0x80004005
call fcn.00401090
mov edx, dword [eax]
mov ecx, eax
mov eax, dword [edx + 0xc]
call eax
add eax, 0x10
mov dword [esp + 0x24], eax
mov dword [esp + 0x968], ebp
call fcn.0040f911
xor ecx, ecx
cmp eax, ebp
setne cl
cmp ecx, ebp
jne 0x409db8
push 0x80004005
call fcn.00401090
mov edx, dword [eax]
mov ecx, eax
mov eax, dword [edx + 0xc]
call eax
add eax, 0x10
mov dword [esp + 0x20], eax
mov eax, dword [0x439008]
add eax, 0xfffffffe
cmp eax, 3
mov byte [esp + 0x968], 1
ja case.default.0x409de1
jmp dword [eax*4 + 0x40a2f8]
mov edi, dword [sym.imp.KERNEL32.dll_QueryDosDeviceA]
mov esi, 0x61
mov ebx, 0x1a
jmp 0x409e00
push esi
lea ecx, [esp + 0x45c]
push 0x4302f4
push ecx
call fcn.00419ba9
add esp, 0xc
push 0x104
lea edx, [esp + 0x54]
push edx
lea eax, [esp + 0x460]
push eax
call edi
test eax, eax
je 0x409e81
lea ecx, [esp + 0x50]
push ecx
call fcn.004180bb
lea edx, [esp + 0x54]
push str.cdrom
push edx
call fcn.00417c00
add esp, 0xc
test eax, eax
je 0x409e81
push esi
lea eax, [esp + 0x258]
push str.._c:
push eax
call fcn.00419ba9
lea ecx, [esp + 0x260]
push ecx
call fcn.00404e30
push eax
lea edx, [esp + 0x64]
push edx
push str.Info_2_1_:___dp_all_Find_the_CDRom__s_and_Send_rewind___d_n
call fcn.00404820
add esp, 0x1c
add esi, 1
sub ebx, 1
jne 0x409e00
push 0x1388
jmp 0x409fd0
push 0x42f3ac
push 0x4431a0
call fcn.004196a4
mov esi, eax
add esp, 8
cmp esi, ebp
je case.0x409de1.4
push esi
lea eax, [esp + 0x560]
push 0x400
push eax
call fcn.0041a575
push esi
call fcn.00419415
mov cl, byte [esp + 0x56c]
add esp, 0x10
mov byte [0x439005], cl
movsx edx, byte [0x439005]
push edx
lea eax, [esp + 0x258]
push str.._c:
push eax
call fcn.00419ba9
lea ecx, [esp + 0x260]
push ecx
call fcn.00404e30
push eax
lea edx, [esp + 0x64]
push edx
push str.Info_2_2_:___dp_volume__Find_the_CDRom__s_and_Send_rewind___d_n
call fcn.00404820
add esp, 0x1c
push 0x1388
call dword [sym.imp.KERNEL32.dll_Sleep]
mov esi, dword [0x490420]
mov eax, dword [0x490424]
cmp esi, eax
jbe 0x409f36
call fcn.00418eb2
mov eax, dword [0x490424]
mov ebx, 0x49041c
jmp 0x409f40
cmp dword [0x490420], eax
mov edi, eax
jbe 0x409f4f
call fcn.00418eb2
cmp ebx, ebp
je 0x409f5b
cmp ebx, 0x49041c
je 0x409f60
call fcn.00418eb2
cmp esi, edi
je 0x409fcb
cmp ebx, ebp
jne 0x409f6d
call fcn.00418eb2
cmp esi, dword [ebx + 8]
jb 0x409f77
call fcn.00418eb2
mov ebp, 0x10
cmp dword [esi + 0x18], ebp
lea edi, [esi + 4]
jb 0x409f88
mov eax, dword [edi]
jmp 0x409f8a
mov eax, edi
push eax
push str.Info_2_3_:Check_fake_PID__s_whether_a_mass_storage_device_n
call fcn.00404820
add esp, 8
cmp esi, dword [ebx + 8]
jb 0x409fa2
call fcn.00418eb2
cmp dword [esi + 0x18], ebp
jb 0x409fa9
mov edi, dword [edi]
push edi
call fcn.00409410
add esp, 4
cmp esi, dword [ebx + 8]
jb 0x409fbc
call fcn.00418eb2
mov eax, dword [0x490424]
add esi, 0x1c
xor ebp, ebp
jmp 0x409f40
push 0xbb8
call dword [sym.imp.KERNEL32.dll_Sleep]
push 4
push ebp
push ebp
push ebp
call dword [sym.imp.SETUPAPI.dll_SetupDiGetClassDevsA]
mov ebx, eax
cmp ebx, 0xffffffff
jne 0x40a051
push str.Error_:_SetupDiGetClassDevs_error...
call fcn.00404820
mov eax, dword [esp + 0x24]
add eax, 0xfffffff0
add esp, 4
mov byte [esp + 0x968], 0
lea ecx, [eax + 0xc]
or edx, ebx
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x40a01c
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov eax, dword [esp + 0x24]
add eax, 0xfffffff0
mov dword [esp + 0x968], 0xffffffff
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x40a047
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov eax, 0x4e26
jmp 0x40a2d0
lea ecx, [esp + 0x34]
push ecx
push ebp
push ebx
mov dword [esp + 0x40], 0x1c
mov dword [esp + 0x28], ebp
call dword [sym.imp.SETUPAPI.dll_SetupDiEnumDeviceInfo]
test eax, eax
je 0x40a274
jmp 0x40a076
xor ebp, ebp
mov edi, dword [sym.imp.SETUPAPI.dll_SetupDiGetDeviceRegistryPropertyA]
lea edx, [esp + 0x18]
push edx
push ebp
push ebp
lea eax, [esp + 0x3c]
push eax
push 1
lea ecx, [esp + 0x48]
push ecx
xor esi, esi
push ebx
mov dword [esp + 0x30], esi
mov dword [esp + 0x34], ebp
mov dword [esp + 0x44], ebp
mov dword [esp + 0x48], ebp
call edi
test eax, eax
jne 0x40a102
mov ebp, dword [sym.imp.KERNEL32.dll_GetLastError]
call ebp
cmp eax, 0xd
je 0x40a254
call ebp
cmp eax, 0x7a
jne 0x40a254
test esi, esi
je 0x40a0cf
push esi
call dword [sym.imp.KERNEL32.dll_LocalFree]
mov edx, dword [esp + 0x18]
push edx
push 0x40
call dword [sym.imp.KERNEL32.dll_LocalAlloc]
mov edx, dword [esp + 0x18]
lea ecx, [esp + 0x18]
push ecx
push edx
push eax
mov dword [esp + 0x20], eax
lea eax, [esp + 0x3c]
push eax
push 1
lea ecx, [esp + 0x48]
push ecx
push ebx
call edi
test eax, eax
mov esi, dword [esp + 0x14]
je 0x40a0a8
cmp byte [esi], 0
mov ebp, esi
je 0x40a24d
lea ecx, [ecx]
mov edx, dword [esp + 0x18]
add edx, esi
cmp ebp, edx
jae 0x40a24d
push ebp
call fcn.004180bb
push 0
push ebp
call fcn.004027b0
add esp, 0xc
test eax, eax
je 0x40a24d
push ebp
push str.Info__:_Find_device__ID:__s..._n
call fcn.00404820
push 0xff
lea eax, [esp + 0x364]
push 0
push eax
call fcn.00418130
lea ecx, [esp + 0x36c]
push ecx
lea edx, [esp + 0x4c]
push edx
push ebx
call fcn.00402660
lea eax, [esp + 0x378]
push 0x42f358
push eax
call fcn.00417c00
add esp, 0x28
test eax, eax
je 0x40a24d
push 0xff
lea ecx, [esp + 0x158]
push 0
push ecx
call fcn.00418130
lea edx, [esp + 0x160]
push edx
lea eax, [esp + 0x44]
push eax
push ebx
call fcn.00405d00
lea ecx, [esp + 0x16c]
push str.usbstor
push ecx
call fcn.00417c00
add esp, 0x20
test eax, eax
je 0x40a24d
mov edx, dword [esp + 0x48]
push 0
push edx
lea eax, [esp + 0x34]
push eax
lea ecx, [esp + 0x34]
push ecx
call dword [sym.imp.SETUPAPI.dll_CM_Get_DevNode_Status]
test eax, eax
je 0x40a21e
sub esp, 0x1c
mov edi, esp
mov ecx, 7
lea esi, [esp + 0x50]
push ebx
rep movsd dword es:[edi], dword [esi]
call fcn.00404d30
add esp, 0x20
test eax, eax
je 0x40a233
push ebp
call dword [sym.imp.KERNEL32.dll_lstrlenA]
cmp byte [eax + ebp + 1], 0
mov esi, dword [esp + 0x14]
lea ebp, [eax + ebp + 1]
jne 0x40a110
jmp 0x40a24d
lea edx, [esp + 0x154]
push edx
push ebp
push str.Info_2_4_:_s__s__Device_is_present__dont_remove__n
call fcn.00404820
jmp 0x40a24a
lea eax, [esp + 0x154]
push eax
push ebp
push str.Info_2_5_:_Cant_find__s__s__devnodes_status__Delete_this_device_n
call fcn.00404820
mov esi, dword [esp + 0x20]
add esp, 0xc
push esi
call dword [sym.imp.KERNEL32.dll_LocalFree]
mov eax, dword [esp + 0x1c]
lea ecx, [esp + 0x34]
add eax, 1
push ecx
push eax
push ebx
mov dword [esp + 0x28], eax
call dword [sym.imp.SETUPAPI.dll_SetupDiEnumDeviceInfo]
test eax, eax
jne 0x40a074
push ebx
call dword [sym.imp.SETUPAPI.dll_SetupDiDestroyDeviceInfoList]
mov eax, dword [esp + 0x20]
add eax, 0xfffffff0
mov byte [esp + 0x968], 0
lea edx, [eax + 0xc]
or ecx, 0xffffffff
lock xadd dword [edx], ecx
dec ecx
test ecx, ecx
jg 0x40a2a3
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov eax, dword [esp + 0x24]
add eax, 0xfffffff0
mov dword [esp + 0x968], 0xffffffff
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x40a2ce
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
xor eax, eax
mov ecx, dword [esp + 0x960]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebp
pop ebx
mov ecx, dword [esp + 0x948]
xor ecx, esp
call fcn.0041811d
add esp, 0x958
ret