MiRewriteTrimPteAsDemandZero

CHAR __stdcall MiRewriteTrimPteAsDemandZero(INT64 a1, INT64 a2){
  __int64 v2; 
  _UNICODE_STRING *v5; 
  UINT8 v6; 
  wchar_t *v7; 
  UINT64 v8; 
  __int16 v9; 
  INT64 v10; 
  UINT64 v11; 
  unsigned __int64 v12; 
  int v13; 
  int v14; 
  _ETHREAD *CurrentThread; 
  bool v16; 
  __int64 v17; 
  _MMPFN *v18; 
  UINT64 *v19; 
  int v20; 
  UINT64 v22; 

  v2 = *(_QWORD *)(a2 + 16);
  if( (v2 & 2) != 0 )
  {
    v10 = *(_QWORD *)(*(_QWORD *)(*(&stru_140C4DB30 + 267) + 8 * ((*(_QWORD *)(a2 + 40) >> 39) & 0x3FFi64))
                    + 8i64 * ((unsigned __int16)v2 >> 12)
                    + 6944);
    if( *(&stru_140C4DB30 + 42) && (v2 & 0x10) == 0 )
      v2 &= ~*(&stru_140C4DB30 + 42);
    LODWORD(v11) = MiTransferSoftwarePte(*(_QWORD *)(a2 + 16), v10, HIDWORD(v2));
    v8 = v11;
  }
  else
  {
    v22 = *(_QWORD *)(a2 + 16);
    MiSetNonResidentPteHeat(&v22, 0i64);
    v8 = v22;
    if( (v9 & 0x400) == 0 )
    {
      v8 = v22 & 0xFFFFFFFFFFFFFFF9ui64;
      v22 &= 0xFFFFFFFFFFFFFFF9ui64;
    }
  }
  v12 = *(_QWORD *)(a2 + 8) | 0x8000000000000000ui64;
  LOBYTE(v13) = MI_PFN_IS_PROTO((_UNICODE_STRING *)a2, v5, v6, v7);
  if( !v13 )
  {
    v14 = 0;
    LOBYTE(CurrentThread) = MiPteInShadowRange(v12);
    if( (_DWORD)CurrentThread )
    {
      LODWORD(CurrentThread) = MiPteHasShadow();
      if( (_DWORD)CurrentThread )
      {
        v14 = 1;
        if( !*(&stru_140C4DB30 + 537) )
        {
          v16 = (v8 & 1) == 0;
          goto LABEL_15;
        }
      }
      else
      {
        CurrentThread = (_ETHREAD *)KeGetCurrentThread();
        if( (CurrentThread->Tcb.ApcState.Process->Flags3 & 0x1000) != 0 )
        {
          v16 = (v8 & 1) == 0;
LABEL_15:
          if( !v16 )
            v8 |= 0x8000000000000000ui64;
        }
      }
    }
    *(_QWORD *)v12 = v8;
    if( v14 )
      LOBYTE(CurrentThread) = MiWritePteShadow();
    if( (*(_BYTE *)(a1 + 184) & 7) == 0 )
      LOBYTE(CurrentThread) = _InterlockedExchangeAdd64((volatile signed __int64 *)(a1 - 392), 0xFFFFFFFFFFFFFFFFui64);
    return(char)CurrentThread;
  }
  v17 = *(_QWORD *)(a2 + 40) & 0xFFFFFFFFFi64;
  v18 = &MmGetPfnDb()[v17];
  v19 = (UINT64 *)((char *)MiMapPageInHyperSpaceWorker(v17, 0i64, 0x80000000ui64) + 8 * ((v12 >> 3) & 0x1FF));
  LOBYTE(v20) = MiPteInShadowRange((UINT64)v19);
  if( v20 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v8 & 1) != 0 )
    v8 |= 0x8000000000000000ui64;
  *v19 = v8;
  MiUnmapPageInHyperSpaceWorker(v19, 0x11u, 0x80000000ui64);
  MiLockNestedPageAtDpcInline(v18);
  MiDecrementShareCount(v18);
  LOBYTE(CurrentThread) = -1;
  _InterlockedAnd64(&v18->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
  return(char)CurrentThread;
}

Referenced by:

MiWsleFree