RtlpHpSegContextCompact

INT64 **__fastcall RtlpHpSegContextCompact(INT64 a1, CHAR a2){
  bool v2; 
  CHAR v5; 
  _QWORD *v6; 
  unsigned __int8 v7; 
  UINT64 v8; 
  UINT64 v9; 
  INT64 *v10; 
  INT64 **result; 
  __int64 v12; 
  UINT64 v13; 
  INT64 *v14; 
  _ETHREAD *CurrentThread; 
  unsigned int SessionId; 
  unsigned __int8 v17; 
  int v18; 
  __int64 v19; 
  _KLOCK_ENTRY *v20; 
  __int64 v21; 
  INT64 v22; 
  INT64 **v23; 
  INT64 **v24; 
  INT64 v25; 
  INT64 v26; 
  INT64 *v27; 
  CHAR v28; 
  int v29; 
  UINT64 a3; 

  v2 = *(_QWORD *)(a1 + 88) == 0i64;
  v27 = &v26;
  v26 = (INT64)&v26;
  if( !v2 )
  {
    v5 = RtlpHpSegLockAcquire(a1, a2);
    v6 = *(_QWORD **)(a1 + 72);
    v28 = v5;
    v7 = v5;
    if( v6 != (_QWORD *)(a1 + 72) )
    {
      do
      {
        v8 = (UINT64)&v6[4 * *(unsigned __int8 *)(a1 + 10)];
        v9 = v8 + 32 * (256i64 - *(unsigned __int8 *)(a1 + 10));
        if( v8 < v9 )
        {
          while( 1 )
          {
            if( (*(_BYTE *)(v8 + 24) & 1) == 0 && *(_WORD *)(v8 + 28) != 0xFFFF )
            {
              RtlpHpSegFreeRangeRemove(a1, v8);
              *(_BYTE *)(v8 + 24) |= 1u;
              v12 = 32i64 * ((unsigned int)*(unsigned __int8 *)(v8 + 31) - 1);
              *(_BYTE *)(v12 + v8 + 24) |= 1u;
              LODWORD(v13) = RtlpHpSegPageRangeCoalesce(a1, v8, a2, 1i64, &v28);
              v8 = v13;
              v14 = (INT64 *)RtlpHpSegFreeRangeInsert(a1, v13, 0i64);
              if( v14 )
                break;
            }
            v8 += 32i64 * *(unsigned __int8 *)(v8 + 31);
            if( v8 >= v9 )
              goto LABEL_6;
          }
          v22 = *v14;
          v6 = (_QWORD *)v6[1];
          v23 = (INT64 **)v14[1];
          if( *(INT64 **)(*v14 + 8) != v14
            || *v23 != v14
            || (*v23 = (INT64 *)v22,
                *(_QWORD *)(v22 + 8) = v23,
                v24 = (INT64 **)v27,
                --*(_QWORD *)(a1 + 88),
                *v24 != &v26) )
          {
            __fastfail(3u);
          }
          v14[1] = (INT64)v24;
          *v14 = (INT64)&v26;
          *v24 = v14;
          v27 = v14;
        }
LABEL_6:
        v6 = (_QWORD *)*v6;
      }
      while( v6 != (_QWORD *)(a1 + 72) );
      v7 = v28;
    }
    if( (a2 & 1) == 0 )
    {
      if( (*(_DWORD *)(a1 + 40) & 1) != 0 )
      {
        ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(a1 + 64));
        __writecr8(v7);
      }
      else
      {
        if( (_InterlockedExchangeAdd64((volatile signed __int64 *)(a1 + 64), 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
          ExfTryToWakePushLock((_EX_PUSH_LOCK *)(a1 + 64));
        LODWORD(a3) = 0;
        CurrentThread = (_ETHREAD *)KeGetCurrentThread();
        if( MiGetSystemRegionType(a1 + 64) == 1 )
          SessionId = MmGetSessionIdEx(CurrentThread->Tcb.ApcState.Process);
        else
          SessionId = -1;
        --CurrentThread->Tcb.SpecialApcDisable;
        v17 = ++CurrentThread->Tcb.AbAllocationRegionCount;
        v18 = ((char)CurrentThread->Tcb.AbEntrySummary | (char)CurrentThread->Tcb.AbOrphanedEntrySummary) ^ 0x3F;
        v2 = !_BitScanReverse((unsigned int *)&v19, v18);
        v29 = v19;
        if( v2 )
          goto LABEL_37;
        while( 1 )
        {
          v20 = &CurrentThread->Tcb.LockEntries[v19];
          v18 &= ~(1 << v19);
          if( (v20->AcquiredByte & 1) != 0
            && (v20->LockState.$E8276A2CF8B819ED32D1B6FEB35D730A::_bf_0 & 1) == 0
            && (v20->LockState.$E8276A2CF8B819ED32D1B6FEB35D730A::_bf_0 & 0x7FFFFFFFFFFFFFFCi64) == ((a1 + 64) & 0x7FFFFFFFFFFFFFFCi64)
            && v20->LockState.SessionId == SessionId )
          {
            v20->AcquiredByte &= ~1u;
            if( v20->LockState.$E8276A2CF8B819ED32D1B6FEB35D730A::_bf_0 )
              break;
          }
          v2 = !_BitScanReverse((unsigned int *)&v19, v18);
          v29 = v19;
          if( v2 )
            goto LABEL_37;
        }
        if( !v20 )
        {
LABEL_37:
          if( (*(&CurrentThread->Tcb.MiscFlags + 1) & 0x10000) == 0 )
            KeBugCheckEx(0x162u, CurrentThread, (PVOID)(a1 + 64), (PVOID)SessionId, 0i64);
        }
        else
        {
          v20->CrossThreadReleasableAndBusyByte |= 2u;
          if( v20->LockState.$E8276A2CF8B819ED32D1B6FEB35D730A::_bf_0 < 0 )
            KiAbEntryRemoveFromTree(v20);
          LODWORD(a3) = v20->BoostBitmap.AllFields & 0x1FFFF;
          v20->BoostBitmap.AllFields &= 0xFFFE0000;
          v20->ThreadLocalFlags &= ~1u;
          v20->LockState.$E8276A2CF8B819ED32D1B6FEB35D730A::_bf_0 = 0i64;
          v21 = v20 - CurrentThread->Tcb.LockEntries;
          if( v17 == 1 )
            CurrentThread->Tcb.AbEntrySummary |= 1 << v21;
          else
            _InterlockedOr8((volatile signed __int8 *)&CurrentThread->Tcb.AbOrphanedEntrySummary, 1 << v21);
        }
        --CurrentThread->Tcb.AbAllocationRegionCount;
        KiAbThreadRemoveBoosts(&CurrentThread->Tcb, (VOID *)(a1 + 64), &a3);
        v2 = CurrentThread->Tcb.SpecialApcDisable++ == -1;
        if( v2
          && ($F25F8C4BA33AF922A5F1AF68CD89DDDF *)CurrentThread->Tcb.ApcState.ApcListHead[0].Flink != &CurrentThread->Tcb.152 )
        {
          KiCheckForKernelApcDelivery();
        }
        KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
      }
    }
  }
  v10 = (INT64 *)v26;
  for( result = (INT64 **)&v26; v10 != &v26; result = (INT64 **)&v26 )
  {
    v25 = (INT64)v10;
    v10 = (INT64 *)*v10;
    RtlpHpSegSegmentFree(a1, v25, 0x7FFFFFFFi64, 1i64);
  }
  return result;
}

Referenced by:

RtlpHpHeapCompact