Function at 0x4047e0
Capabilities:
Link many functions at runtime

Disassembly:
mov eax, 0x2134
call fcn.0040cd20
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 0x40480a
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 0x404829
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 0x404846
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 0x404861
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 0x40487c
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 0x404897
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 0x4048c5
push str.GetClassDevs_All_Present_Devices_
call fcn.00404a50
add esp, 4
mov eax, 1
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x2134
ret
push str.InfoSet_got...
call fcn.00404a50
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 0x404a11
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.0040ccc2
lea edx, [esp + 0x50]
push edx
call fcn.00404a50
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 0x40495c
call dword [sym.imp.KERNEL32.dll_GetLastError]
cmp eax, 0xd
jne 0x40495c
push str.Invalid_Data_maybe_Legacy_device
call fcn.00404a50
add esp, 4
jmp 0x4049fd
lea ecx, [esp + 0x144]
lea edx, [esp + 0x44]
push ecx
push str.buffer_s
push edx
call fcn.0040ccc2
lea eax, [esp + 0x150]
push eax
call fcn.00404a50
mov al, byte [esp + 0x154]
add esp, 0x10
test al, al
lea esi, [esp + 0x144]
je 0x4049e4
mov ecx, dword [esp + 0x10]
lea edx, [esp + ecx + 0x144]
cmp esi, edx
jae 0x4049e4
mov eax, dword [esp + 0x2148]
push esi
push eax
call fcn.0040cc13
add esp, 8
test eax, eax
je 0x4049c7
push esi
call ebx
lea esi, [esi + eax + 1]
cmp byte [esi], 0
jne 0x404995
jmp 0x4049e4
lea ecx, [esp + 0x28]
push ecx
push edi
push 5
call dword [esp + 0x28]
test al, al
jne 0x4049e4
push str.CallClassInstaller_REMOVE_
call fcn.00404a50
add esp, 4
lea edx, [esp + 0x144]
test edx, edx
je 0x4049fd
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 0x4048f3
mov esi, dword [sym.imp.KERNEL32.dll_GetLastError]
call esi
test eax, eax
je 0x404a33
call esi
cmp eax, 0x103
je 0x404a33
push str.EnumDeviceInfo
call fcn.00404a50
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