RtlpHpLargeAllocSetExtraPresent

CHAR __fastcall RtlpHpLargeAllocSetExtraPresent(INT64 a1, UINT64 a2, CHAR a3){
  unsigned __int64 v6; 
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  LOBYTE(v6) = RtlpHpLargeLockAcquireShared(a1, a3);
  v7 = (unsigned __int8)v6;
  v8 = *(_QWORD *)(a1 + 72);
  if( (*(_BYTE *)(a1 + 80) & 1) != 0 )
  {
    if( v8 )
      v8 ^= a1 + 72;
    else
      v8 = 0i64;
  }
  while( v8 )
  {
    v6 = *(_QWORD *)(v8 + 24) & 0xFFFFFFFFFFFF0000ui64;
    if( a2 < v6 )
    {
      v6 = *(_QWORD *)v8;
    }
    else
    {
      if( a2 <= v6 )
        goto LABEL_16;
      v6 = *(_QWORD *)(v8 + 8);
    }
    if( (*(_BYTE *)(a1 + 80) & 1) != 0 && v6 )
      v8 ^= v6;
    else
      v8 = v6;
  }
  v8 = 0i64;
LABEL_16:
  if( (a3 & 1) == 0 )
  {
    if( (*(_DWORD *)a1 & 1) != 0 )
    {
      ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)(a1 + 64));
      LOBYTE(v6) = KiIrqlFlags;
      __writecr8(v7);
    }
    else
    {
      if( _InterlockedCompareExchange64((volatile signed __int64 *)(a1 + 64), 0i64, 17i64) != 17 )
        ExfReleasePushLockShared((INT64 *)(a1 + 64));
      KeAbPostRelease((PVOID)(a1 + 64));
      LOBYTE(v6) = KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
    }
  }
  *(_QWORD *)(v8 + 32) |= 1ui64;
  return v6;
}

Referenced by:

RtlpHpExtrasSetPresent