MiDecreaseUsedPtesCount

UINT16 __stdcall MiDecreaseUsedPtesCount(VOID *OpaquePointer, UINT64 PtesJustZeroed){
  unsigned __int64 v3; 
  int v4; 
  int v5; 
  UINT64 SpinCount; 

  v3 = HIWORD(*((_DWORD *)OpaquePointer + 4)) & 0x3FF;
  v4 = PtesJustZeroed;
  if( v3 < (unsigned int)PtesJustZeroed )
    KeBugCheckEx(0x1Au, (PVOID)0x41790, OpaquePointer, (PVOID)v3, (PVOID)(unsigned int)PtesJustZeroed);
  LODWORD(SpinCount) = 0;
  while( _interlockedbittestandset64((volatile signed __int32 *)OpaquePointer + 6, 0x3Fui64) )
  {
    do
      KeYieldProcessorEx(&SpinCount);
    while( *((__int64 *)OpaquePointer + 3) < 0 );
  }
  v5 = ((*((_QWORD *)OpaquePointer + 2) >> 16) & 0x3FF) - v4;
  *((_QWORD *)OpaquePointer + 2) ^= ((unsigned int)*((_QWORD *)OpaquePointer + 2) ^ (v5 << 16)) & 0x3FF0000;
  _InterlockedAnd64((volatile signed __int64 *)OpaquePointer + 3, 0x7FFFFFFFFFFFFFFFui64);
  return v5;
}

Referenced by:

MiDeleteLargeUserPde
MiReducePteUseCount
MiSetProtectionOnSection
MiUpdateAwePageTable