Function at 0x404670
Capabilities:
Link many functions at runtime

Disassembly:
mov eax, 0x2134
call fcn.0040ceb0
push ebx
push ebp
push esi
push edi
push str.SetupApi.dll
call dword [sym.imp.KERNEL32.dll_LoadLibraryA]
mov esi, eax
test esi, esi
jne 0x40469a
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x2134
ret
mov edi, dword [sym.imp.KERNEL32.dll_GetProcAddress]
push str.SetupDiGetClassDevsA
push esi
call edi
mov ebp, eax
test ebp, ebp
jne 0x4046b9
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x2134
ret
push str.SetupDiEnumDeviceInfo
push esi
call edi
mov ebx, eax
test ebx, ebx
mov dword [esp + 0x18], ebx
jne 0x4046d6
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x2134
ret
push str.SetupDiGetDeviceRegistryPropertyA
push esi
call edi
test eax, eax
mov dword [esp + 0x20], eax
jne 0x4046f1
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x2134
ret
push str.SetupDiCallClassInstaller
push esi
call edi
test eax, eax
mov dword [esp + 0x1c], eax
jne 0x40470c
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x2134
ret
push str.SetupDiDestroyDeviceInfoList
push esi
call edi
test eax, eax
mov dword [esp + 0x14], eax
jne 0x404727
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x2134
ret
push 4
push 0
push 0
push 0
call ebp
mov edi, eax
cmp edi, 0xffffffff
jne 0x404755
push str.GetClassDevs_All_Present_Devices_
call fcn.004048e0
add esp, 4
mov eax, 1
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x2134
ret
push str.InfoSet_got...
call fcn.004048e0
add esp, 4
lea eax, [esp + 0x28]
xor ebp, ebp
mov dword [esp + 0x28], 0x1c
push eax
push ebp
push edi
call ebx
test al, al
je 0x4048a1
mov ebx, dword [sym.imp.KERNEL32.dll_lstrlenA]
push ebp
lea ecx, [esp + 0x48]
push str.i_d
push ecx
mov dword [esp + 0x1c], 0
call fcn.0040ce5a
lea edx, [esp + 0x50]
push edx
call fcn.004048e0
add esp, 0x10
lea eax, [esp + 0x10]
lea ecx, [esp + 0x144]
lea edx, [esp + 0x24]
push eax
push 0x2000
push ecx
push edx
lea eax, [esp + 0x38]
push 4
push eax
push edi
call dword [esp + 0x3c]
test al, al
jne 0x4047ec
call dword [sym.imp.KERNEL32.dll_GetLastError]
cmp eax, 0xd
jne 0x4047ec
push str.Invalid_Data_maybe_Legacy_device
call fcn.004048e0
add esp, 4
jmp 0x40488d
lea ecx, [esp + 0x144]
lea edx, [esp + 0x44]
push ecx
push str.buffer_s
push edx
call fcn.0040ce5a
lea eax, [esp + 0x150]
push eax
call fcn.004048e0
mov al, byte [esp + 0x154]
add esp, 0x10
test al, al
lea esi, [esp + 0x144]
je 0x404874
mov ecx, dword [esp + 0x10]
lea edx, [esp + ecx + 0x144]
cmp esi, edx
jae 0x404874
mov eax, dword [esp + 0x2148]
push esi
push eax
call fcn.0040cdab
add esp, 8
test eax, eax
je 0x404857
push esi
call ebx
lea esi, [esi + eax + 1]
cmp byte [esi], 0
jne 0x404825
jmp 0x404874
lea ecx, [esp + 0x28]
push ecx
push edi
push 5
call dword [esp + 0x28]
test al, al
jne 0x404874
push str.CallClassInstaller_REMOVE_
call fcn.004048e0
add esp, 4
lea edx, [esp + 0x144]
test edx, edx
je 0x40488d
lea eax, [esp + 0x144]
push eax
call dword [sym.imp.KERNEL32.dll_LocalFree]
lea ecx, [esp + 0x28]
inc ebp
push ecx
push ebp
push edi
call dword [esp + 0x24]
test al, al
jne 0x404783
mov esi, dword [sym.imp.KERNEL32.dll_GetLastError]
call esi
test eax, eax
je 0x4048c3
call esi
cmp eax, 0x103
je 0x4048c3
push str.EnumDeviceInfo
call fcn.004048e0
add esp, 4
call esi
push edi
mov esi, eax
call dword [esp + 0x18]
xor eax, eax
pop edi
test esi, esi
pop esi
pop ebp
setne al
pop ebx
add esp, 0x2134
ret