Function at 0x4015a0
Capabilities:
Enumerate devices by category

Disassembly:
sub esp, 0x12c
push ebx
push ebp
push esi
mov ebp, ecx
xor ebx, ebx
push edi
push ebx
mov dword [esp + 0x1c], ebp
mov dword [ebp + 0x124], ebx
call dword [sym.imp.ole32.dll_CoInitialize]
test eax, eax
jge 0x4015d0
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x12c
ret
mov ecx, 0x40
xor eax, eax
lea edi, [esp + 0x39]
mov byte [esp + 0x38], bl
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
stosb byte es:[edi], al
mov eax, dword [ebp + 0x234]
mov dword [esp + 0x24], ebx
cmp eax, ebx
jne 0x4017f4
lea eax, [esp + 0x1c]
mov dword [esp + 0x1c], ebx
push eax
push 0x404d38
push 1
push ebx
push 0x404d58
call dword [sym.imp.ole32.dll_CoCreateInstance]
test eax, eax
jge 0x401623
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x12c
ret
mov eax, dword [esp + 0x1c]
lea edx, [esp + 0x14]
push ebx
mov dword [esp + 0x18], ebx
mov ecx, dword [eax]
push edx
push 0x404d48
push eax
call dword [ecx + 0xc]
mov esi, eax
mov eax, dword [esp + 0x1c]
push eax
mov ecx, dword [eax]
call dword [ecx + 8]
mov eax, dword [esp + 0x14]
mov dword [esp + 0x1c], ebx
cmp eax, ebx
jne 0x401661
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x12c
ret
cmp esi, ebx
jge 0x401672
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x12c
ret
mov edx, dword [eax]
push eax
call dword [edx + 0x14]
xor eax, eax
lea edx, [esp + 0x24]
mov dword [esp + 0x2a], eax
push edx
mov dword [esp + 0x32], eax
lea edx, [esp + 0x14]
mov dword [esp + 0x36], eax
mov dword [esp + 0x14], ebx
mov word [esp + 0x3a], ax
mov eax, dword [esp + 0x18]
mov dword [esp + 0x24], ebx
mov word [esp + 0x2c], bx
mov ecx, dword [eax]
push edx
push 1
push eax
call dword [ecx + 0xc]
test eax, eax
jl 0x40178c
mov ebp, dword [sym.imp.KERNEL32.dll_WideCharToMultiByte]
mov esi, dword [sym.imp.MSVCRT.dll__strnicmp]
cmp dword [esp + 0x24], ebx
jbe 0x401788
mov eax, dword [esp + 0x10]
lea edx, [esp + 0x20]
push edx
push 0x404d74
mov ecx, dword [eax]
push ebx
push ebx
push eax
call dword [ecx + 0x24]
test eax, eax
jl 0x40175c
mov eax, dword [esp + 0x20]
lea edx, [esp + 0x28]
push ebx
mov word [esp + 0x2c], 8
mov ecx, dword [eax]
push edx
push str.FriendlyName
push eax
call dword [ecx + 0xc]
test eax, eax
jl 0x401728
mov ecx, dword [esp + 0x30]
push ebx
push ebx
lea eax, [esp + 0x40]
push 0x104
push eax
push 0xffffffffffffffff
push ecx
push ebx
push ebx
call ebp
mov edx, dword [esp + 0x30]
push edx
call dword [sym.imp.OLEAUT32.dll_SysStringLen]
mov eax, dword [esp + 0x20]
push eax
mov ecx, dword [eax]
call dword [ecx + 8]
mov edx, dword [esp + 0x18]
or ecx, 0xffffffff
add edx, 0x12c
xor eax, eax
mov edi, edx
mov dword [esp + 0x20], ebx
repne scasb al, byte es:[edi]
not ecx
dec ecx
lea eax, [esp + 0x38]
push ecx
push edx
push eax
call esi
add esp, 0xc
test eax, eax
je 0x4017ad
mov eax, dword [esp + 0x10]
push eax
mov ecx, dword [eax]
call dword [ecx + 8]
mov eax, dword [esp + 0x14]
lea ecx, [esp + 0x24]
push ecx
lea ecx, [esp + 0x14]
mov dword [esp + 0x14], ebx
mov edx, dword [eax]
push ecx
push 1
push eax
call dword [edx + 0xc]
test eax, eax
jge 0x4016c2
mov ebp, dword [esp + 0x18]
mov eax, dword [esp + 0x14]
push eax
mov edx, dword [eax]
call dword [edx + 8]
mov eax, dword [ebp + 0x234]
cmp eax, ebx
jne 0x4017f4
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x12c
ret
mov ecx, dword [esp + 0x18]
mov eax, dword [esp + 0x10]
add ecx, 0x234
mov edx, dword [eax]
push ecx
push 0x404d28
push ebx
push ebx
push eax
call dword [edx + 0x20]
mov esi, eax
mov eax, dword [esp + 0x10]
push eax
mov edx, dword [eax]
call dword [edx + 8]
cmp esi, ebx
mov dword [esp + 0x10], ebx
jge 0x401788
mov eax, dword [esp + 0x14]
push eax
mov ecx, dword [eax]
call dword [ecx + 8]
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x12c
ret
mov edx, dword [ebp + 0x238]
lea ecx, [ebp + 0x238]
cmp edx, ebx
jne 0x401820
mov edx, dword [eax]
push ecx
push 0x404d18
push eax
call dword [edx]
test eax, eax
jge 0x401820
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x12c
ret
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0x12c
ret