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.