PiDmObjectGetCachedObjectPropertyData

INT64 __fastcall PiDmObjectGetCachedObjectPropertyData(
        UINT64 a1,
        WCHAR *a2,
        UINT64 a3,
        INT64 a4,
        INT64 a5,
        INT64 a6,
        INT64 a7,
        INT64 a8){
  unsigned int v10; 
  int Object; 
  char v12; 
  __int64 v13; 
  unsigned int CachedKeyIndex; 
  __int64 v15; 
  unsigned int v16; 
  _ETHREAD *CurrentThread; 
  ULONG_PTR v18; 
  INT64 *v19; 
  unsigned int v21; 
  DEVPROPKEY **v22; 
  ULONG_PTR BugCheckParameter2; 
  BugCheckParameter2 = a3;
  v22 = 0i64;
  v21 = 0;
  v10 = a1;
  Object = -1073741802;
  v12 = 0;
  PiDmGetCacheKeys(a1, &v22, &v21);
  if( v21 )
  {
    CachedKeyIndex = PiDmGetCachedKeyIndex((__int64)v22, v21, v13);
    v15 = CachedKeyIndex;
    if( CachedKeyIndex < v16 )
    {
      if( !a3 )
      {
        Object = PiDmGetObject(v10, a2, (INT64 *)&BugCheckParameter2);
        if( Object < 0 )
          return(unsigned int)Object;
        v12 = 1;
      }
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      --*((_WORD *)CurrentThread + 242);
      v18 = BugCheckParameter2;
      ExAcquirePushLockSharedEx(BugCheckParameter2, 0i64);
      v19 = (INT64 *)(v18 + 8 * (v15 + 2 * v15 + 14));
      if( *(_DWORD *)v19 <= 1u )
        Object = -1073741802;
      else
        Object = PiDmCacheDataDecode(v19, (_DWORD *)a5, (_GUID *)a6, (unsigned int)a7, (UINT64 *)a8);
      ExReleasePushLockEx(v18, 0i64);
      KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
      if( v12 )
        PiDmObjectRelease((CHAR *)BugCheckParameter2);
    }
  }
  return(unsigned int)Object;
}

Referenced by:

PiDmObjectGetCachedObjectProperty