MiRemoveWsle

INT64 __fastcall MiRemoveWsle(INT64 a1, UINT64 a2, UINT8 *a3, CHAR a4, INT64 a5, INT64 a6){
  char v6; 
  unsigned __int64 *v11; 
  KSPIN_LOCK_QUEUE *v12; 
  unsigned __int64 PteBase; 
  _MMPTE *PteLimit; 
  char v15; 
  char v16; 
  unsigned __int8 v17; 
  int v18; 
  UINT64 v19; 
  unsigned __int64 *v20; 
  unsigned __int64 v21; 
  unsigned __int8 v22; 
  unsigned __int64 v23; 
  INT64 result; 
  UINT64 v25; 
  UINT8 *v26; 
  INT64 v27; 
  _KSPIN_LOCK_QUEUE LockQueue; 
  __int64 v29; 
  __int128 v30; 
  __int64 v31; 
  UINT64 v32; 
  v6 = *(_BYTE *)(a1 + 184) & 7;
  v29 = 0i64;
  if( v6 == 2 )
    v11 = &qword_140C4F500;
  else
    v11 = (unsigned __int64 *)(a1 + 256);
  LockQueue.Lock = v11;
  LockQueue.Next = 0i64;
  v12 = (KSPIN_LOCK_QUEUE *)_InterlockedExchange64((volatile __int64 *)v11, (__int64)&LockQueue);
  if( v12 )
    KxWaitForLockOwnerShip(&LockQueue, v12);
  PteBase = (unsigned __int64)MmGetPteBase();
  PteLimit = MmGetPteLimit();
  if( (_DWORD)a6 )
  {
    *(_QWORD *)(a1 + 144) -= a3;
    v30 = 0i64;
    v31 = 0i64;
    if( a2 < PteBase || a2 > (unsigned __int64)PteLimit )
      *(_QWORD *)(a1 + 128) -= a3;
  }
  if( (*(_BYTE *)(a1 + 184) & 7) == 4 )
  {
    if( PsNtosImageBase
      && (a2 < PsNtosImageEnd && a2 >= PsNtosImageBase || a2 < PsHalImageEnd && a2 >= (unsigned __int64)PsHalImageBase) )
    {
      LODWORD(xmmword_140C4CA88) = xmmword_140C4CA88 - (_DWORD)a3;
    }
    else
    {
      if( (unsigned int)MiGetSystemRegionType(a2) == 12
        && MiLookupDataTableEntry(
             (__int64)(((PteBase + ((a2 >> 9) & 0x7FFFFFFFF8i64)) << 25) - (PteBase << 25)) >> 16,
             2i64,
             v27) )
      {
        DWORD1(xmmword_140C4CA88) -= (_DWORD)a3;
      }
      PteLimit = MmGetPteLimit();
    }
  }
  v15 = *(_BYTE *)(a1 + 184);
  *(_QWORD *)(a1 + 136) -= a3;
  v16 = v15 & 7;
  if( a2 < PteBase || a2 > (unsigned __int64)PteLimit )
  {
    *(_QWORD *)(a1 + 120) -= a3;
    v17 = a4 & 0xF;
    v18 = 1;
    if( v17 == 8 )
      goto LABEL_16;
  }
  else
  {
    v18 = 0;
    if( v16 )
      goto LABEL_16;
    v17 = a4 & 0xF;
  }
  if( a2 < PteBase || a2 > (unsigned __int64)PteLimit )
  {
    v19 = *(_QWORD *)((char *)MmGetPdeBase() + ((a2 >> 18) & 0x3FFFFFF8));
    v32 = v19;
    MiPteInShadowRange((UINT64)&v32);
    v20 = (unsigned __int64 *)((char *)MmGetPfnDb() + 48 * ((v19 >> 12) & 0xFFFFFFFFFi64));
    v21 = *v20;
    v22 = (*v20 >> 14) & 7;
    if( ((*v20 >> 4) & 0x3FF) != 0 )
    {
      if( v17 == v22 )
      {
        v23 = v21 ^ ((unsigned __int16)v21 ^ (unsigned __int16)(16 * (((*v20 >> 4) & 0x3FF) - (_WORD)a3))) & 0x3FF0;
LABEL_13:
        *v20 = v23;
        goto LABEL_14;
      }
      if( v17 > v22 )
      {
        v23 = v21 & 0xFFFFFFFFFFFE000Fui64 | (16 * (-(__int16)a3 & 0x3FF | ((unsigned __int64)(v17 & 7) << 10)));
        goto LABEL_13;
      }
    }
  }
LABEL_14:
  *(_QWORD *)(a1 + 8i64 * v17 + 40) -= a3;
  if( v17 == 7 )
    MiVolunteerForTrimFirst(a1, -(__int64)a3);
LABEL_16:
  if( (*(_BYTE *)(a1 + 184) & 7) == 2 )
  {
    qword_140C4F548 -= (__int64)a3;
    if( v18 == 1 )
      qword_140C4F550 -= (__int64)a3;
  }
  _m_prefetchw(&LockQueue);
  result = (INT64)LockQueue.Next;
  if( LockQueue.Next )
    goto LABEL_51;
  result = _InterlockedCompareExchange64((volatile signed __int64 *)LockQueue.Lock, 0i64, (signed __int64)&LockQueue);
  if( (_KSPIN_LOCK_QUEUE *)result != &LockQueue )
  {
    result = (INT64)KxWaitForLockChainValid(&LockQueue);
LABEL_51:
    LockQueue.Next = 0i64;
    _InterlockedXor64((volatile signed __int64 *)(result + 8), 1ui64);
  }
  if( v18 == 1 )
  {
    if( (_DWORD)a5 == 9
      || (_DWORD)a5 == 10 && (result = PteBase, (*(_BYTE *)(((a2 >> 9) & 0x7FFFFFFFF8i64) + PteBase) & 1) != 0) )
    {
      if( a3 )
      {
        v25 = a2;
        v26 = a3;
        do
        {
          MiWriteValidPteVolatile((MMPTE *)(PteBase + ((v25 >> 9) & 0x7FFFFFFFF8i64)), 0x80000000ui64);
          v25 += 4096i64;
          --v26;
        }
        while( v26 );
      }
    }
  }
  return result;
}

Referenced by:

MiConvertPrivateToProto
MiDeleteVa
MiTerminateWsle
MiTerminateWsleCluster