PiDmCacheDataDecode

INT64 __fastcall PiDmCacheDataDecode(INT64 *a1, _DWORD *a2, _GUID *a3, UINT64 a4, UINT64 *a5){
  int v5; 
  unsigned int v6; 
  int v8; 
  int v9; 
  int v10; 
  int v11; 
  int v12; 
  __int64 v13; 
  unsigned int v14; 
  UINT64 v15; 
  UINT8 *v16; 
  unsigned int v18; 
  unsigned int v19; 
  struct _UNICODE_STRING DestinationString; 
  v5 = *(_DWORD *)a1;
  v6 = 0;
  DestinationString = 0i64;
  v8 = v5 - 2;
  if( !v8 )
    return(unsigned int)-1073741275;
  v9 = v8 - 1;
  if( !v9 )
  {
    *a2 = *((_DWORD *)a1 + 2);
    v18 = *((_DWORD *)a1 + 3);
    *(_DWORD *)a5 = v18;
    if( (unsigned int)a4 >= v18 )
    {
      v15 = v18;
      v16 = (UINT8 *)(a1 + 2);
      goto LABEL_12;
    }
    return(unsigned int)-1073741789;
  }
  v10 = v9 - 1;
  if( !v10 )
  {
    *a2 = 13;
    *(_DWORD *)a5 = 16;
    if( (unsigned int)a4 >= 0x10 )
    {
      *a3 = *(_GUID *)(a1 + 1);
      return v6;
    }
    return(unsigned int)-1073741789;
  }
  v11 = v10 - 1;
  if( !v11 )
  {
    *a2 = *((_DWORD *)a1 + 2);
    v19 = *((_DWORD *)a1 + 3);
    *(_DWORD *)a5 = v19;
    if( (unsigned int)a4 >= v19 )
    {
      v15 = v19;
      v16 = (UINT8 *)a1[2];
      goto LABEL_12;
    }
    return(unsigned int)-1073741789;
  }
  if( v11 != 1 )
    return(unsigned int)-1073741595;
  v12 = *((_DWORD *)a1 + 2);
  if( v12 == 13 )
  {
    *a2 = 13;
    *(_DWORD *)a5 = 16;
    if( (unsigned int)a4 >= 0x10 )
    {
      RtlInitUnicodeString(&DestinationString, *(PCWSTR *)(a1[2] + 16), (WCHAR)a3);
      return(unsigned int)RtlGUIDFromString(&DestinationString, a3);
    }
    return(unsigned int)-1073741789;
  }
  if( v12 != 18 )
    return(unsigned int)-1073741595;
  *a2 = 18;
  v13 = -1i64;
  do
    ++v13;
  while( *(_WORD *)(*(_QWORD *)(a1[2] + 16) + 2 * v13) );
  v14 = 2 * v13 + 2;
  *(_DWORD *)a5 = v14;
  if( (unsigned int)a4 < v14 )
    return(unsigned int)-1073741789;
  v15 = v14;
  v16 = *(UINT8 **)(a1[2] + 16);
LABEL_12:
  memmove((UINT8 *)a3, v16, v15);
  return v6;
}

Referenced by:

PiDmListUpdateAggregationCountWorker
PiDmObjectGetCachedObjectPropertyData
PiDmObjectProcessPropertyChange