PiPnpRtlGetFilteredDeviceInterfaceList
INT64 __fastcall PiPnpRtlGetFilteredDeviceInterfaceList(INT64 a1){
bool v2;
WCHAR *v3;
char v4;
__int64 v5;
WCHAR *v6;
_WORD *v7;
INT64 result;
UINT64 v9;
INT64 r8_0[2];
__int128 v11;
__int64 v12;
struct _UNICODE_STRING DestinationString;
GUID Guid;
v2 = (*(_BYTE *)(a1 + 32) & 1) == 0;
v11 = 0i64;
v3 = *(WCHAR **)(a1 + 16);
v4 = _mm_cvtsi128_si32((__m128i)0i64);
v5 = *(_QWORD *)(a1 + 40);
if( !v2 )
v4 = 1;
LOBYTE(v11) = v4;
v6 = *(WCHAR **)(a1 + 24);
*((_QWORD *)&v11 + 1) = v5;
v12 = *(_QWORD *)(a1 + 48);
Guid = 0i64;
*(_OWORD *)r8_0 = 0i64;
DestinationString = 0i64;
if( !v6 )
{
v7 = *(_WORD **)(a1 + 56);
if( !v3 )
return PiDmGetCmObjectListFromCache(
3i64,
(__int64)PiPnpRtlInterfaceFilterCallback,
(__int64)r8_0,
(__int64)v7,
*(_DWORD *)(a1 + 64),
*(_QWORD *)(a1 + 72));
LODWORD(v9) = *(_DWORD *)(a1 + 64);
return PiDmGetCmObjectConstraintListFromCache(
0i64,
v3,
(INT64)PiPnpRtlInterfaceFilterCallback,
(INT64)r8_0,
v7,
v9,
*(UINT64 **)(a1 + 72));
}
if( !v3 )
{
LABEL_11:
LODWORD(v9) = *(_DWORD *)(a1 + 64);
return PiDmGetCmObjectConstraintListFromCache(
1i64,
v6,
(INT64)PiPnpRtlInterfaceFilterCallback,
(INT64)r8_0,
*(_WORD **)(a1 + 56),
v9,
*(UINT64 **)(a1 + 72));
}
result = RtlInitUnicodeStringEx(&DestinationString, v3);
if( (int)result >= 0 )
{
LODWORD(result) = RtlGUIDFromString(&DestinationString, &Guid);
if( (int)result >= 0 )
{
v6 = *(WCHAR **)(a1 + 24);
r8_0[0] = (INT64)&Guid;
goto LABEL_11;
}
}
return result;
}Referenced by:
PiPnpRtlCmActionCallback