MiWriteValidPteNewPage

CHAR __stdcall MiWriteValidPteNewPage(INT64 *a1, INT64 a2, INT64 a3){
  int v3; 
  INT64 v6; 
  INT64 CurrentThread; 
  INT64 v8; 
  bool v9; 

  v3 = a3;
  if( (_DWORD)a3 )
    v6 = *a1;
  else
    LODWORD(v6) = MI_READ_PTE_LOCK_FREE((INT64)a1);
  CurrentThread = (a2 ^ v6) & 0x7F00000000000000i64;
  v8 = CurrentThread ^ a2;
  if( v3 )
  {
    *a1 = v8;
    return CurrentThread;
  }
  LOBYTE(CurrentThread) = MiPteInShadowRange((UINT64)a1);
  if( (_DWORD)CurrentThread )
  {
    LODWORD(CurrentThread) = MiPteHasShadow();
    if( (_DWORD)CurrentThread )
    {
      v3 = 1;
      if( *(&stru_140C4DB30 + 537) )
        goto LABEL_5;
      v9 = (v8 & 1) == 0;
    }
    else
    {
      CurrentThread = (INT64)KeGetCurrentThread();
      if( (*(_DWORD *)(*(_QWORD *)(CurrentThread + 184) + 2172i64) & 0x1000) == 0 )
        goto LABEL_5;
      v9 = (v8 & 1) == 0;
    }
    if( !v9 )
    {
      LOBYTE(CurrentThread) = 0;
      v8 |= 0x8000000000000000ui64;
    }
  }
LABEL_5:
  *a1 = v8;
  if( v3 )
    LOBYTE(CurrentThread) = MiWritePteShadow();
  return CurrentThread;
}

Referenced by:

MiConvertPrivateToProto
MiCopyKstack
MiTradeActivePage
MiUnmapMdlCommon
MiWriteAweClusterPte
MxSwapPages