PiDmGetReferencedObjectFromProperty

INT64 __fastcall PiDmGetReferencedObjectFromProperty(
        UINT64 a1,
        WCHAR *a2,
        CHAR *a3,
        INT64 a4,
        INT64 a5,
        INT64 a6,
        INT64 *a7){
  unsigned int v8; 
  int CachedObjectReference; 
  unsigned int Object; 
  int ObjectProperty; 
  PVOID v13; 
  int v14; 
  WCHAR *v15; 
  INT64 v16; 
  UINT64 v17; 
  PVOID P; 
  ULONG v19[2]; 
  __int16 v20[40]; 
  v8 = a1;
  LODWORD(v17) = 0;
  P = 0i64;
  *a7 = 0i64;
  CachedObjectReference = PiDmObjectGetCachedObjectReference(a1, a2, (ULONG_PTR)a3, a5, a7);
  Object = CachedObjectReference;
  if( CachedObjectReference >= 0 )
  {
    if( *(_DWORD *)(*a7 + 28) != (_DWORD)a6 )
    {
      PiDmObjectRelease((CHAR *)*a7);
      *a7 = 0i64;
      return(unsigned int)-1073741772;
    }
    return Object;
  }
  if( CachedObjectReference != -1073741802 )
    return Object;
  LODWORD(v16) = 0;
  ObjectProperty = PnpGetObjectProperty(
                     1517317712i64,
                     16i64,
                     (INT64)a2,
                     v8,
                     0i64,
                     0i64,
                     (INT64 *)a5,
                     (UINT64)&v17,
                     (INT64)&P,
                     v19,
                     v16);
  v13 = P;
  Object = ObjectProperty;
  if( ObjectProperty >= 0 )
  {
    if( (_DWORD)v17 == 13 )
    {
      PnpStringFromGuid((int *)P, (wchar_t *)v20);
      Object = v14;
      if( v14 < 0 )
        goto LABEL_11;
      v15 = (WCHAR *)v20;
      goto LABEL_10;
    }
    if( (_DWORD)v17 == 18 )
    {
      v15 = (WCHAR *)P;
LABEL_10:
      Object = PiDmGetObject((unsigned int)a6, v15, a7);
      goto LABEL_11;
    }
    Object = -1073741772;
  }
LABEL_11:
  if( v13 )
    ExFreePoolWithTag(v13, 0x5A706E50u);
  return Object;
}

Referenced by:

PiDmObjectProcessPropertyChange