MiMarkSystemVaAllocated

NTSTATUS __stdcall MiMarkSystemVaAllocated(UINT64 a1, INT64 a2, INT64 r8_0, INT64 a4, INT64 a5){
  _MM_SESSION_SPACE *Session; 
  __int64 v6; 
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  INT64 *v9; 
  unsigned __int64 v10; 
  _RTL_BITMAP_EX *v11; 
  NTSTATUS v12; 
  unsigned __int64 v13; 
  unsigned __int64 v14; 
  unsigned int v15; 
  unsigned __int64 *Buffer; 
  unsigned __int64 *v17; 
  unsigned __int64 v18; 
  unsigned __int64 *v19; 
  bool v20; 
  bool i; 
  UINT64 v22; 
  _ETHREAD *v23; 
  unsigned int SessionId; 
  unsigned __int8 v25; 
  int v26; 
  _KLOCK_ENTRY *v27; 
  __int64 v28; 
  __int64 v29; 
  UINT32 v31; 
  UINT64 a3; 
  _ETHREAD *CurrentThread; 
  _KLOCK_QUEUE_HANDLE LockHandle; 
  unsigned int LogFileName; 
  int v36; 

  v36 = a4;
  LogFileName = a1;
  CurrentThread = 0i64;
  memset(&LockHandle, 0, sizeof(LockHandle));
  Session = 0i64;
  v6 = (_QWORD)MmGetPteBase() << 25;
  v7 = (r8_0 - a2) >> 3;
  v8 = ((((a2 << 25) - v6) >> 16 << 25) - v6) >> 16;
  if( (_DWORD)a1 == 1 )
  {
    v9 = 0i64;
    v10 = qword_140C4CAE0;
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    Session = CurrentThread->Tcb.ApcState.Process->Session;
    --CurrentThread->Tcb.SpecialApcDisable;
    v11 = (_RTL_BITMAP_EX *)((char *)Session + 832);
    ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)KeGetCurrentThread()->ApcState.Process->Session + 103, 0i64);
  }
  else
  {
    v9 = MiSystemVaToDynamicBitmap(a1);
    v11 = (_RTL_BITMAP_EX *)v9;
    v10 = v9[4];
    KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)v9 + 8, &LockHandle);
  }
  if( v8 < v10 )
    goto LABEL_5;
  v13 = (v8 - v10) >> 21;
  if( (_DWORD)a5 && (v14 = v13 + v7 - 1, v14 >= v11->SizeOfBitMap) )
  {
    if( v14 >= v9[2]
      || (v15 = LogFileName,
          !MiExtendDynamicBitMap(
             (PHANDLE)v9,
             (_ACCESS_MASK)v11,
             (POBJECT_ATTRIBUTES)((v14 - v11->SizeOfBitMap + 0x8000) & 0xFFFFFFFFFFFF8000ui64),
             (PUNICODE_STRING)LogFileName,
             1u,
             v31)) )
    {
LABEL_5:
      v12 = 0;
      goto LABEL_33;
    }
  }
  else
  {
    v15 = LogFileName;
  }
  if( v36 == 1 )
  {
    if( v13 < v11->SizeOfBitMap )
    {
      if( v7 <= 1 )
      {
        if( v7 != 1 || _bittest64((const signed __int64 *)v11->Buffer, v13) )
          goto LABEL_17;
LABEL_27:
        RtlSetBitsEx(v11, v13, v7);
        v12 = 1;
        if( Session )
        {
          *((_DWORD *)Session + 218) += v7;
          goto LABEL_33;
        }
        goto LABEL_32;
      }
      if( v11->SizeOfBitMap - v13 >= v7 )
      {
        Buffer = v11->Buffer;
        v17 = &Buffer[v13 >> 6];
        v18 = *v17;
        v19 = &Buffer[(v13 + v7 - 1) >> 6];
        if( v17 != v19 )
        {
          for( i = (v18 & (-1i64 << v13)) == 0; i; i = *v17 == 0 )
          {
            if( ++v17 == v19 )
            {
              v20 = ((0xFFFFFFFFFFFFFFFFui64 >> ~((unsigned __int8)v13 + (unsigned __int8)v7 - 1)) & *v17) == 0;
              goto LABEL_26;
            }
          }
          goto LABEL_17;
        }
        v20 = (v18 & (0xFFFFFFFFFFFFFFFFui64 >> (64 - (unsigned __int8)v7) << v13)) == 0;
LABEL_26:
        if( v20 )
          goto LABEL_27;
      }
    }
LABEL_17:
    v12 = 0;
    goto LABEL_33;
  }
  RtlClearBitsEx(v11, v13, v7);
  v12 = 1;
  if( Session )
  {
    *((_DWORD *)Session + 218) -= v7;
    goto LABEL_33;
  }
  v7 = -(__int64)v7;
LABEL_32:
  _InterlockedExchangeAdd64(&MiState[(int)v15 + 1553], v7);
LABEL_33:
  if( Session )
  {
    v22 = (UINT64)KeGetCurrentThread()->ApcState.Process->Session + 824;
    if( (_InterlockedExchangeAdd64((volatile signed __int64 *)v22, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((_EX_PUSH_LOCK *)v22);
    LODWORD(a3) = 0;
    v23 = (_ETHREAD *)KeGetCurrentThread();
    if( MiGetSystemRegionType(v22) == 1 )
      SessionId = MmGetSessionIdEx(v23->Tcb.ApcState.Process);
    else
      SessionId = -1;
    --v23->Tcb.SpecialApcDisable;
    v25 = ++v23->Tcb.AbAllocationRegionCount;
    v26 = ((char)v23->Tcb.AbEntrySummary | (char)v23->Tcb.AbOrphanedEntrySummary) ^ 0x3F;
    while( 1 )
    {
      v20 = !_BitScanReverse((unsigned int *)&v28, v26);
      if( v20 )
        goto LABEL_46;
      v27 = &v23->Tcb.LockEntries[v28];
      v26 &= ~(1 << v28);
      if( (v27->AcquiredByte & 1) != 0
        && (v27->LockState.$E8276A2CF8B819ED32D1B6FEB35D730A::_bf_0 & 1) == 0
        && (v27->LockState.$E8276A2CF8B819ED32D1B6FEB35D730A::_bf_0 & 0x7FFFFFFFFFFFFFFCi64) == (v22 & 0x7FFFFFFFFFFFFFFCi64)
        && v27->LockState.SessionId == SessionId )
      {
        v27->AcquiredByte &= ~1u;
        if( v27->LockState.$E8276A2CF8B819ED32D1B6FEB35D730A::_bf_0 )
          break;
      }
    }
    if( !v27 )
    {
LABEL_46:
      if( (*(&v23->Tcb.MiscFlags + 1) & 0x10000) == 0 )
        KeBugCheckEx(0x162u, v23, (PVOID)v22, (PVOID)SessionId, 0i64);
      goto LABEL_53;
    }
    v27->CrossThreadReleasableAndBusyByte |= 2u;
    if( v27->LockState.$E8276A2CF8B819ED32D1B6FEB35D730A::_bf_0 < 0 )
      KiAbEntryRemoveFromTree(v27);
    LODWORD(a3) = v27->BoostBitmap.AllFields & 0x1FFFF;
    v27->BoostBitmap.AllFields &= 0xFFFE0000;
    v27->ThreadLocalFlags &= ~1u;
    v27->LockState.$E8276A2CF8B819ED32D1B6FEB35D730A::_bf_0 = 0i64;
    v29 = v27 - v23->Tcb.LockEntries;
    if( v25 == 1 )
      v23->Tcb.AbEntrySummary |= 1 << v29;
    else
      _InterlockedOr8((volatile signed __int8 *)&v23->Tcb.AbOrphanedEntrySummary, 1 << v29);
LABEL_53:
    --v23->Tcb.AbAllocationRegionCount;
    KiAbThreadRemoveBoosts(&v23->Tcb, (VOID *)v22, &a3);
    v20 = v23->Tcb.SpecialApcDisable++ == -1;
    if( v20 && ($F25F8C4BA33AF922A5F1AF68CD89DDDF *)v23->Tcb.ApcState.ApcListHead[0].Flink != &v23->Tcb.152 )
      KiCheckForKernelApcDelivery();
    KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  }
  else
  {
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
  }
  return v12;
}

Referenced by:

MiReservePoolMemory