PiPnpRtlInterfaceFilterCallback
CHAR __fastcall PiPnpRtlInterfaceFilterCallback(INT64 a1, const WCHAR *a2, UINT64 a3, INT64 a4){
unsigned int v5;
wchar_t *v8;
CHAR v9;
_WORD *v10;
__int64(__fastcall *v12)(INT64, const WCHAR *, _QWORD, _QWORD);
__int64 v13;
wchar_t *PoolWithTag;
int v15;
ULONG v16;
__int128 v17;
v5 = a3;
v8 = 0i64;
v9 = 0;
v15 = 0;
v17 = 0i64;
v16 = 0;
if( !*(_QWORD *)a4 )
goto LABEL_2;
if( (int)PnpGetObjectProperty(
PiPnpRtlCtx,
(__int64)a2,
3i64,
0i64,
0i64,
(__int64)&DEVPKEY_DeviceInterface_ClassGuid,
&v15,
(unsigned __int64)&v17,
16,
&v16,
0) >= 0
&& v15 == 13
&& v16 >= 0x10 )
{
v13 = **(_QWORD **)a4 - v17;
if( !v13 )
v13 = *(_QWORD *)(*(_QWORD *)a4 + 8i64) - *((_QWORD *)&v17 + 1);
if( !v13 )
{
LABEL_2:
v10 = *(_WORD **)(a4 + 8);
if( !v10 || !*v10 )
goto LABEL_25;
PoolWithTag = (wchar_t *)ExAllocatePoolWithTag(PagedPool, 0x190ui64, 0x47706E50ui64);
v8 = PoolWithTag;
if( !PoolWithTag )
return v9;
if( (int)PnpGetObjectProperty(
PiPnpRtlCtx,
(__int64)a2,
3i64,
0i64,
0i64,
(__int64)&DEVPKEY_Device_InstanceId,
&v15,
(unsigned __int64)PoolWithTag,
400,
&v16,
0) >= 0
&& v15 == 18
&& !wcsicmp(*(const wchar_t **)(a4 + 8), v8) )
{
LABEL_25:
if( *(_BYTE *)(a4 + 16) )
{
CmIsDeviceInterfaceEnabled(a1, a2);
}
else
{
v9 = 1;
v12 = *(__int64(__fastcall **)(INT64, const WCHAR *, _QWORD, _QWORD))(a4 + 24);
if( v12 )
v9 = v12(a1, a2, v5, *(_QWORD *)(a4 + 32));
}
}
if( v8 )
ExFreePoolWithTag(v8, 0x47706E50u);
}
}
return v9;
}Referenced by:
No references.