MiInsertLargePageChain

VOID __fastcall MiInsertLargePageChain(INT64 rcx0, INT64 a2, INT64 a3, INT64 a4, INT64 a5){
  _BOOL8 v7; 
  int v8; 
  unsigned int IsFreeZeroPfnCold; 
  unsigned __int64 v10; 
  WORK_QUEUE_TYPE v11; 
  void *v12; 
  unsigned __int64 v13; 
  unsigned __int64 v14; 
  INT64 v15; 
  INT64 v16; 
  WORK_QUEUE_TYPE v17; 
  PVOID v18; 
  INT64 v19; 
  unsigned int v20; 
  bool v21; 
  WORK_QUEUE_TYPE v22; 
  PVOID v23; 
  INT64 *v24; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  INT64 v26; 
  INT64 a1[2]; 
  __int64 v28; 
  v26 = a3;
  v28 = 0i64;
  v7 = (*(_DWORD *)(a2 + 16) & 0x3E0i64) != 0;
  memset(&LockHandle, 0, sizeof(LockHandle));
  *(_OWORD *)a1 = 0i64;
  IsFreeZeroPfnCold = MiIsFreeZeroPfnCold(a2);
  v10 = MiLargePageSizes[v8];
  if( v8 == 2 )
  {
    MiConvertEntireLargePageToSmall((KQUEUE *)a2, 2, 1u, (LARGE_INTEGER *)v7, 0i64, 0i64);
  }
  else
  {
    v13 = MiLargePageSizes[v8 + 1];
    v14 = v10 / v13;
    v15 = v10 + (a2 - (__int64)MmGetPfnDb()) / 48 - v13;
    v16 = 48 * (v10 - v13) + a2;
    MiLockPageAtDpc(v16);
    LockHandle.LockQueue.Next = 0i64;
    a1[1] = v7 | 0x300000000i64;
    a1[0] = v15;
    LOBYTE(v28) = 2;
    LockHandle.LockQueue.Lock = (unsigned __int64 *volatile)(rcx0 + 4328);
    KxAcquireQueuedSpinLock((PIO_WORKITEM)&LockHandle, (PIO_WORKITEM_ROUTINE)(rcx0 + 4328), v17, v18);
    while( 1 )
    {
      if( (*(_BYTE *)(v16 + 34) & 7) == 6 )
      {
        MiSetPfnPageState(v16, 5);
        MiSetFreeZeroPfnCold(v19, IsFreeZeroPfnCold);
        MiSetPfnPageState(v16, 6);
      }
      else
      {
        MiSetFreeZeroPfnCold(v16, IsFreeZeroPfnCold);
      }
      *(_BYTE *)(v16 + 39) = (unsigned __int8)v12 | *(_BYTE *)(v16 + 39) & 0xFC;
      if( (_DWORD)v14 == 1 )
      {
        if( v26 )
          break;
      }
      v21 = *(_QWORD *)(rcx0 + 4352) == 0i64;
      a1[0] = v15;
      if( v21 )
      {
        HIDWORD(a1[1]) |= 2u;
      }
      else
      {
        KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
        HIDWORD(a1[1]) &= ~2u;
      }
      MiInsertLargePageInNodeList((INT64)a1);
      LODWORD(v14) = v14 - 1;
      if( !(_DWORD)v14 )
        goto LABEL_21;
      v15 -= v13;
      v16 += -48i64 * v13;
      v20 = HIDWORD(a1[1]);
      v21 = (a1[1] & 0x200000000i64) == 0;
      if( (a1[1] & 0x200000000i64) != 0 )
      {
        if( _interlockedbittestandset64((volatile signed __int32 *)(v16 + 24), 0x3Fui64) )
        {
          KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
          v20 = HIDWORD(a1[1]) & 0xFFFFFFFD;
          HIDWORD(a1[1]) &= ~2u;
        }
        else
        {
          v20 = HIDWORD(a1[1]);
        }
        v21 = (v20 & 2) == 0;
      }
      if( v21 )
      {
        HIDWORD(a1[1]) = v20 | 2;
        MiLockPageAtDpc(v16);
        LockHandle.LockQueue.Next = 0i64;
        LockHandle.LockQueue.Lock = (unsigned __int64 *volatile)(rcx0 + 4328);
        KxAcquireQueuedSpinLock((PIO_WORKITEM)&LockHandle, (PIO_WORKITEM_ROUTINE)(rcx0 + 4328), v22, v23);
      }
    }
    _InterlockedAnd64((volatile signed __int64 *)(v16 + 24), 0x7FFFFFFFFFFFFFFFui64);
  }
LABEL_21:
  if( (_DWORD)a5 )
  {
    if( (a1[1] & 0x200000000i64) == 0 )
    {
      LockHandle.LockQueue.Next = 0i64;
      LockHandle.LockQueue.Lock = (unsigned __int64 *volatile)(rcx0 + 4328);
      KxAcquireQueuedSpinLock((PIO_WORKITEM)&LockHandle, (PIO_WORKITEM_ROUTINE)(rcx0 + 4328), v11, v12);
    }
    v24 = *(INT64 **)(rcx0 + 4288);
    *(_QWORD *)(rcx0 + 4288) = 0i64;
    --*(_DWORD *)(rcx0 + 4284);
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    if( v24 )
      MiWakeLargePageWaiters(v24);
  }
  else if( (a1[1] & 0x200000000i64) != 0 )
  {
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  }
}

Referenced by:

MiInsertDemotedPages