Function at 0x409560
Capabilities:
Get disk information

Disassembly:
sub esp, 0x948
mov eax, dword [0x4424ac]
xor eax, esp
mov dword [esp + 0x944], eax
push ebx
push ebp
push esi
push edi
push 0x103
lea eax, [esp + 0x355]
push 0
push eax
mov byte [esp + 0x35c], 0
call fcn.00418350
push 0x103
lea ecx, [esp + 0x59]
push 0
push ecx
mov byte [esp + 0x60], 0
call fcn.00418350
push 0x103
lea edx, [esp + 0x169]
push 0
push edx
mov byte [esp + 0x170], 0
call fcn.00418350
mov eax, dword [0x437008]
add eax, 0xfffffffe
add esp, 0x24
cmp eax, 3
ja case.default.0x4095da
jmp dword [eax*4 + 0x409b18]
mov ebx, dword [sym.imp.KERNEL32.dll_QueryDosDeviceA]
mov esi, 0x61
mov edi, 0x1a
push esi
push 0x42efd0
lea eax, [esp + 0x358]
push 0x104
push eax
call fcn.00402520
add esp, 0x10
test eax, eax
je 0x409623
push esi
push str.RemoveDeviceRegisterInfoForSetup
push str._s_StringCbPrintf_volum:_c_err_n
call fcn.00404950
add esp, 0xc
push 0x104
lea ecx, [esp + 0x4c]
push ecx
lea edx, [esp + 0x358]
push edx
call ebx
test eax, eax
je 0x4096c7
lea eax, [esp + 0x48]
lea edx, [eax + 1]
mov cl, byte [eax]
add eax, 1
test cl, cl
jne 0x409646
sub eax, edx
add eax, 1
push eax
lea eax, [esp + 0x4c]
push eax
call fcn.00417f6c
lea ecx, [esp + 0x50]
push str.cdrom
push ecx
call fcn.00417550
add esp, 0x10
test eax, eax
je 0x4096c7
push esi
push str.._c:
lea edx, [esp + 0x154]
push 0x104
push edx
call fcn.00402520
add esp, 0x10
test eax, eax
je 0x4096a7
push esi
push str.RemoveDeviceRegisterInfoForSetup
push str._s_StringCbPrintf_volum_2_:_c_err_n
call fcn.00404950
add esp, 0xc
lea eax, [esp + 0x14c]
push eax
call fcn.00401e20
push eax
lea ecx, [esp + 0x50]
push ecx
push str.Info__:___dp_all_Find_the_CDRom__s_and_Send_rewind___d_n
call fcn.00404950
add esp, 0x10
add esi, 1
sub edi, 1
jne 0x4095f1
push 0x1388
jmp 0x40985e
push 0x42e414
lea edx, [esp + 0x18]
push 0x4438a0
push edx
call fcn.00419053
add esp, 0xc
test eax, eax
je 0x40970a
push 0x4438a0
push str.The_file__s_was_not_opened_n
call fcn.00404950
add esp, 8
mov eax, dword [esp + 0x14]
test eax, eax
je case.default.0x4095da
push eax
lea eax, [esp + 0x558]
push 0x400
push eax
call fcn.0041a045
mov ecx, dword [esp + 0x20]
push ecx
call fcn.00418dc4
mov dl, byte [esp + 0x564]
add esp, 0x10
mov byte [0x437005], dl
jmp case.default.0x4095da
movsx eax, byte [0x437005]
push eax
push str.._c:
lea ecx, [esp + 0x154]
push 0x104
push ecx
call fcn.00402520
add esp, 0x10
test eax, eax
je 0x409788
lea edx, [esp + 0x14c]
push edx
push str.RemoveDeviceRegisterInfoForSetup
push str._s_StringCbPrintf_CtlName:_s_err_n
call fcn.00404950
add esp, 0xc
lea eax, [esp + 0x14c]
push eax
call fcn.00401e20
push eax
lea ecx, [esp + 0x50]
push ecx
push str.Info__:___dp_volume__Find_the_CDRom__s_and_Send_rewind___d_n
call fcn.00404950
add esp, 0x10
push 0x1388
jmp 0x40985e
mov esi, dword [0x481f98]
mov eax, dword [0x481f9c]
cmp esi, eax
jbe 0x4097cb
call fcn.0041898e
mov eax, dword [0x481f9c]
mov ebx, 0x481f94
mov ebp, 0x10
cmp dword [0x481f98], eax
mov edi, eax
jbe 0x4097e4
call fcn.0041898e
test ebx, ebx
je 0x4097f0
cmp ebx, 0x481f94
je 0x4097f5
call fcn.0041898e
cmp esi, edi
je 0x409859
test ebx, ebx
jne 0x409802
call fcn.0041898e
cmp esi, dword [ebx + 8]
jb 0x40980c
call fcn.0041898e
cmp dword [esi + 0x18], ebp
lea edi, [esi + 4]
jb 0x409818
mov eax, dword [edi]
jmp 0x40981a
mov eax, edi
push eax
push str.Info_2_3_:Check_fake_PID__s_whether_a_mass_storage_device_n
call fcn.00404950
add esp, 8
cmp esi, dword [ebx + 8]
jb 0x409832
call fcn.0041898e
cmp dword [esi + 0x18], ebp
jb 0x409839
mov edi, dword [edi]
push edi
call fcn.00408b70
add esp, 4
cmp esi, dword [ebx + 8]
jb 0x40984c
call fcn.0041898e
mov eax, dword [0x481f9c]
add esi, 0x1c
jmp 0x4097d5
push 0xbb8
call dword [sym.imp.KERNEL32.dll_Sleep]
push 4
xor ebx, ebx
push ebx
push ebx
push ebx
call dword [sym.imp.SETUPAPI.dll_SetupDiGetClassDevsA]
mov esi, eax
cmp esi, 0xffffffff
mov dword [esp + 0x14], esi
jne 0x409893
push str.Error_:_SetupDiGetClassDevs_error...
call fcn.00404950
add esp, 4
mov eax, 0x4e26
jmp 0x409aff
lea edx, [esp + 0x2c]
push edx
push ebx
push esi
mov dword [esp + 0x38], 0x1c
mov dword [esp + 0x28], ebx
call dword [sym.imp.SETUPAPI.dll_SetupDiEnumDeviceInfo]
test eax, eax
je 0x409ae9
jmp 0x4098c2
xor ebx, ebx
mov edi, dword [sym.imp.SETUPAPI.dll_SetupDiGetDeviceRegistryPropertyA]
lea eax, [esp + 0x18]
push eax
push ebx
push ebx
lea ecx, [esp + 0x34]
push ecx
push 1
lea edx, [esp + 0x40]
push edx
push esi
mov byte [esp + 0x2f], 0
mov dword [esp + 0x34], ebx
mov dword [esp + 0x3c], ebx
mov dword [esp + 0x40], ebx
call edi
test eax, eax
jne 0x409ac9
mov ebp, dword [sym.imp.KERNEL32.dll_GetLastError]
call ebp
cmp eax, 0xd
je 0x409945
call ebp
cmp eax, 0x7a
jne 0x409945
test ebx, ebx
je 0x409916
push ebx
call dword [sym.imp.KERNEL32.dll_LocalFree]
mov eax, dword [esp + 0x18]
push eax
push 0x40
call dword [sym.imp.KERNEL32.dll_LocalAlloc]
mov edx, dword [esp + 0x18]
lea ecx, [esp + 0x18]
push ecx
push edx
mov ebx, eax
push ebx
lea eax, [esp + 0x34]
push eax
push 1
lea ecx, [esp + 0x40]
push ecx
push esi
call edi
test eax, eax
je 0x4098f7
jmp 0x40994a
mov byte [esp + 0x13], 1
test ebx, ebx
je 0x409ac9
cmp byte [esp + 0x13], 1
mov ebp, ebx
je 0x409ac2
cmp byte [ebx], 0
je 0x409ac2
mov edx, dword [esp + 0x18]
add edx, ebx
cmp ebp, edx
jae 0x409ac2
mov eax, ebp
lea edx, [eax + 1]
jmp 0x409980
mov cl, byte [eax]
add eax, 1
test cl, cl
jne 0x409980
sub eax, edx
add eax, 1
push eax
push ebp
call fcn.00417f6c
push 0
push ebp
call fcn.00402d60
add esp, 0x10
test eax, eax
je 0x409ac2
push ebp
push str.Info__:_Find_device__ID:__s..._n
call fcn.00404950
push 0xff
lea eax, [esp + 0x460]
push 0
push eax
call fcn.00418350
lea ecx, [esp + 0x468]
push ecx
lea edx, [esp + 0x44]
push edx
push esi
call fcn.00406190
lea eax, [esp + 0x474]
push 0x42e34c
push eax
call fcn.00417550
add esp, 0x28
test eax, eax
je 0x409ac2
push 0xff
lea ecx, [esp + 0x254]
push 0
push ecx
call fcn.00418350
lea edx, [esp + 0x25c]
push edx
lea eax, [esp + 0x3c]
push eax
push esi
call fcn.00405630
lea ecx, [esp + 0x268]
push str.usbstor
push ecx
call fcn.00417550
add esp, 0x20
test eax, eax
je 0x409ac2
mov edx, dword [esp + 0x40]
push 0
push edx
lea eax, [esp + 0x2c]
push eax
lea ecx, [esp + 0x2c]
push ecx
call dword [sym.imp.SETUPAPI.dll_CM_Get_DevNode_Status]
test eax, eax
je 0x409a93
mov edx, dword [esp + 0x14]
sub esp, 0x1c
mov edi, esp
mov ecx, 7
lea esi, [esp + 0x48]
push edx
rep movsd dword es:[edi], dword [esi]
call fcn.00404e40
add esp, 0x20
test eax, eax
je 0x409aa8
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 0x409968
jmp 0x409ac2
lea eax, [esp + 0x250]
push eax
push ebp
push str.Info_2_4_:_s__s__Device_is_present__dont_remove__n
call fcn.00404950
jmp 0x409abf
lea ecx, [esp + 0x250]
push ecx
push ebp
push str.Info_2_5_:_Cant_find__s__s__devnodes_status__Delete_this_device_n
call fcn.00404950
mov esi, dword [esp + 0x20]
add esp, 0xc
push ebx
call dword [sym.imp.KERNEL32.dll_LocalFree]
mov eax, dword [esp + 0x1c]
lea edx, [esp + 0x2c]
add eax, 1
push edx
push eax
push esi
mov dword [esp + 0x28], eax
call dword [sym.imp.SETUPAPI.dll_SetupDiEnumDeviceInfo]
test eax, eax
jne 0x4098c0
push esi
call dword [sym.imp.SETUPAPI.dll_SetupDiDestroyDeviceInfoList]
push str.Info__:_Remove_device_register_Info__END..._n
call fcn.00404950
add esp, 4
xor eax, eax
mov ecx, dword [esp + 0x954]
pop edi
pop esi
pop ebp
pop ebx
xor ecx, esp
call fcn.00417b3b
add esp, 0x948
ret