PiPnpRtlGetFilteredDeviceInterfaceList
NTSTATUS __stdcall PiPnpRtlGetFilteredDeviceInterfaceList(_CM_ACTION_INFORMATION *CmObjectActionInfo){
bool v2;
WCHAR *v3;
char v4;
__int64 v5;
const WCHAR *v6;
HPNPCTX *v7;
NTSTATUS result;
WCHAR *v9;
const WCHAR *v10;
VOID *v11;
VOID *v12;
INT64 MatchCallbackRoutine[2];
__int128 v14;
__int64 v15;
_UNICODE_STRING DestinationString;
_GUID Guid;
v2 = (CmObjectActionInfo[8] & 1) == 0;
v14 = 0i64;
v3 = (WCHAR *)*((_QWORD *)CmObjectActionInfo + 2);
v4 = _mm_cvtsi128_si32((__m128i)0i64);
v5 = *((_QWORD *)CmObjectActionInfo + 5);
if( !v2 )
v4 = 1;
LOBYTE(v14) = v4;
v6 = (const WCHAR *)*((_QWORD *)CmObjectActionInfo + 3);
*((_QWORD *)&v14 + 1) = v5;
v15 = *((_QWORD *)CmObjectActionInfo + 6);
Guid = 0i64;
*(_OWORD *)MatchCallbackRoutine = 0i64;
DestinationString = 0i64;
if( !v6 )
{
v7 = (HPNPCTX *)*((_QWORD *)CmObjectActionInfo + 7);
if( v3 )
{
LODWORD(v10) = CmObjectActionInfo[16];
return PiDmGetCmObjectConstraintListFromCache(
PiDmListInterfacesInInterfaceClass,
v3,
(UINT8)PiPnpRtlInterfaceFilterCallback,
MatchCallbackRoutine,
v7,
v10,
(_CM_OBJECT_TYPE)*((_QWORD *)CmObjectActionInfo + 9),
v12,
(VOID *)MatchCallbackRoutine[0],
(WCHAR *)MatchCallbackRoutine[1],
v14,
*((UINT64 **)&v14 + 1));
}
else
{
LODWORD(v9) = CmObjectActionInfo[16];
return PiDmGetCmObjectListFromCache(
CM_OBJECT_TYPE_DEVICE_INTERFACE,
(UINT8)PiPnpRtlInterfaceFilterCallback,
MatchCallbackRoutine,
v7,
v9,
(_CM_OBJECT_TYPE)*((_QWORD *)CmObjectActionInfo + 9),
v11,
v12,
(WCHAR *)MatchCallbackRoutine[0],
MatchCallbackRoutine[1],
(UINT64 *)v14);
}
}
if( !v3 )
{
LABEL_11:
LODWORD(v10) = CmObjectActionInfo[16];
return PiDmGetCmObjectConstraintListFromCache(
PiDmListInterfacesInDevice,
v6,
(UINT8)PiPnpRtlInterfaceFilterCallback,
MatchCallbackRoutine,
*((HPNPCTX **)CmObjectActionInfo + 7),
v10,
(_CM_OBJECT_TYPE)*((_QWORD *)CmObjectActionInfo + 9),
v12,
(VOID *)MatchCallbackRoutine[0],
(WCHAR *)MatchCallbackRoutine[1],
v14,
*((UINT64 **)&v14 + 1));
}
result = RtlInitUnicodeStringEx(&DestinationString, v3);
if( result >= 0 )
{
result = RtlGUIDFromString(&DestinationString, &Guid);
if( result >= 0 )
{
v6 = (const WCHAR *)*((_QWORD *)CmObjectActionInfo + 3);
MatchCallbackRoutine[0] = (INT64)&Guid;
goto LABEL_11;
}
}
return result;
}Referenced by:
PiPnpRtlCmActionCallback