PspStorageGetObject

INT64 __fastcall PspStorageGetObject(INT64 a1, UINT64 a2, UINT64 *a3){
  INT64 *v4; 
  unsigned __int64 v5; 
  if( (unsigned int)a2 < 0x20 )
    goto LABEL_2;
  LODWORD(a2) = a2 - 32;
  if( (unsigned int)a2 < 0x100 )
  {
    a1 = *(_QWORD *)(a1 + 512);
    if( !a1 )
      return 3221226021i64;
LABEL_2:
    v4 = (INT64 *)(a1 + 16i64 * (unsigned int)a2);
    ExAcquirePushLockSharedEx((UINT64)v4, 0i64);
    v5 = v4[1] & 0xFFFFFFFFFFFFFFFEui64;
    if( v5 )
      ObfReferenceObjectWithTag((PVOID)(v4[1] & 0xFFFFFFFFFFFFFFFEui64), 0x746C6644u);
    if( _InterlockedCompareExchange64(v4, 0i64, 17i64) != 17 )
      ExfReleasePushLockShared(v4);
    KeAbPostRelease(v4);
    if( v5 )
    {
      *a3 = v5;
      return 0i64;
    }
    return 3221226021i64;
  }
  return 3221225485i64;
}

Referenced by:

PsFreeSiloContextSlot
PsGetSiloContext