PiDmObjectGetCachedObjectProperty

__int64 __fastcall PiDmObjectGetCachedObjectProperty(
        int a1,
        wchar_t *a2,
        __int64 a3,
        __int64 a4,
        __int64 a5,
        _DWORD *a6,
        GUID *a7,
        INT64 a8,
        unsigned int *a9){
  INT64 v11; 
  int Object; 
  int v13; 
  __int64 v14; 
  __int64 v16; 
  INT64 v17; 
  CHAR *v18; 
  INT64 a7a; 
  void *P[2]; 
  PVOID v21; 
  P[0] = 0i64;
  v21 = 0i64;
  v11 = (INT64)a7;
  Object = -1073741802;
  if( a7 )
  {
    v13 = a8;
    v11 = -(__int64)((_DWORD)a8 != 0) & (unsigned __int64)a7;
  }
  else
  {
    v13 = 0;
  }
  if( a1 < 7 && !a4 )
  {
    Object = PiDmGetObject((unsigned int)a1, a2, (INT64 *)P);
    if( Object >= 0 )
    {
      v14 = a5;
      if( a1 != 3 || *(_DWORD *)(a5 + 16) != 2 )
        goto LABEL_7;
      v16 = *(_QWORD *)a5 - *(_QWORD *)&DEVPKEY_Device_ContainerId.fmtid.Data1;
      if( *(_QWORD *)a5 == *(_QWORD *)&DEVPKEY_Device_ContainerId.fmtid.Data1 )
        v16 = *(_QWORD *)(a5 + 8) - *(_QWORD *)DEVPKEY_Device_ContainerId.fmtid.Data4;
      if( !v16
        && (int)PiDmObjectGetCachedObjectReference(3, a2, (ULONG_PTR)P[0], (__int64)&DEVPKEY_Device_InstanceId, &v21) >= 0 )
      {
        v17 = v14;
        v18 = (CHAR *)v21;
        LODWORD(a7a) = v13;
        Object = PiDmObjectGetCachedObjectPropertyData(
                   *((unsigned int *)v21 + 7),
                   *((WCHAR **)v21 + 2),
                   (UINT64)v21,
                   v17,
                   (INT64)a6,
                   v11,
                   a7a,
                   (INT64)a9);
        PiDmObjectRelease(v18);
      }
      else
      {
LABEL_7:
        LODWORD(a7a) = v13;
        Object = PiDmObjectGetCachedObjectPropertyData(
                   (unsigned int)a1,
                   a2,
                   (UINT64)P[0],
                   v14,
                   (INT64)a6,
                   v11,
                   a7a,
                   (INT64)a9);
      }
      PiDmObjectRelease((CHAR *)P[0]);
    }
  }
  return(unsigned int)Object;
}

Referenced by:

PiDmObjectGetCachedCmProperty
PiPnpRtlObjectActionCallback