MiWaitForRotateToComplete

NTSTATUS __stdcall MiWaitForRotateToComplete(VOID *Va, UINT8 WsIrql){
  _ETHREAD *CurrentThread; 
  NTSTATUS v3; 
  INT64 v4; 
  unsigned __int64 v5; 
  _EPROCESS *Process; 
  _ETHREAD *i; 
  __int64 v8; 
  _MMSUPPORT_SHARED *v10; 
  _MMSUPPORT_SHARED *SharedVm; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v3 = 0;
  v4 = WsIrql;
  v5 = (unsigned __int64)Va >> 12;
  Process = CurrentThread->Tcb.ApcState.Process;
LABEL_2:
  for( i = Process->RotateInProgress; i; i = *(_ETHREAD **)i->Tcb.gap0 )
  {
    v8 = *(_QWORD *)&i->Tcb.gap0[8];
    if( v5 >= (*(unsigned int *)(v8 + 24) | ((unsigned __int64)*(unsigned __int8 *)(v8 + 32) << 32))
      && v5 <= (*(unsigned int *)(v8 + 28) | ((unsigned __int64)*(unsigned __int8 *)(v8 + 33) << 32)) )
    {
      if( *(_ETHREAD **)&i->Tcb.gap0[16] == CurrentThread )
        return v3;
      v3 = 1;
      if( (*(_BYTE *)(v4 + 13) & 1) != 0 )
      {
        if( !_InterlockedIncrement((volatile signed __int32 *)(v8 + 36)) )
          __fastfail(0xEu);
        MiUnlockWorkingSetExclusive(&Process->Vm.Instance, *(_BYTE *)(v4 + 12));
        --CurrentThread->Tcb.SpecialApcDisable;
        ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)(v8 + 40), 0i64);
        CurrentThread->_bf_1 |= 0x40u;
        MiUnlockAndDereferenceVadShared((PVOID)v8);
        SharedVm = MiGetSharedVm(&Process->Vm.Instance);
        ExAcquireSpinLockExclusive((INT64 *)&SharedVm->WorkingSetLock);
        SharedVm->GoodCitizenWaiting = 0;
      }
      else
      {
        MiUnlockFaultWorkingSet(v4, (_XSTATE_CONFIGURATION *)WsIrql);
        v10 = MiGetSharedVm(&Process->Vm.Instance);
        ExAcquireSpinLockExclusive((INT64 *)&v10->WorkingSetLock);
        v10->GoodCitizenWaiting = 0;
        *(_BYTE *)(v4 + 13) |= 1u;
      }
      goto LABEL_2;
    }
  }
  return v3;
}

Referenced by:

MiUserFault