MiRewriteTrimPteAsDemandZero

CHAR __fastcall MiRewriteTrimPteAsDemandZero(INT64 a1, _QWORD *a2){
  __int64 v2; 
  UNICODE_STRING *v5; 
  UINT8 v6; 
  WCHAR *v7; 
  UINT64 v8; 
  __int16 v9; 
  INT64 v10; 
  unsigned __int64 v11; 
  int v12; 
  int v13; 
  _ETHREAD *CurrentThread; 
  bool v15; 
  __int64 v16; 
  volatile signed __int64 *v17; 
  __int64 v18; 
  UINT64 *v19; 
  UINT64 v21; 
  v2 = a2[2];
  if( (v2 & 2) != 0 )
  {
    v10 = *(_QWORD *)(*(_QWORD *)(qword_140C4E388 + 8 * ((a2[5] >> 39) & 0x3FFi64))
                    + 8i64 * ((unsigned __int16)v2 >> 12)
                    + 6944);
    if( qword_140C4DC80 && (v2 & 0x10) == 0 )
      v2 &= ~qword_140C4DC80;
    v8 = MiTransferSoftwarePte(a2[2], v10, HIDWORD(v2));
  }
  else
  {
    v21 = a2[2];
    MiSetNonResidentPteHeat(&v21, 0i64);
    v8 = v21;
    if( (v9 & 0x400) == 0 )
    {
      v8 = v21 & 0xFFFFFFFFFFFFFFF9ui64;
      v21 &= 0xFFFFFFFFFFFFFFF9ui64;
    }
  }
  v11 = a2[1] | 0x8000000000000000ui64;
  LOBYTE(v12) = MI_PFN_IS_PROTO((UNICODE_STRING *)a2, v5, v6, v7);
  if( v12 )
  {
    v16 = a2[5] & 0xFFFFFFFFFi64;
    v17 = (volatile signed __int64 *)((char *)MmGetPfnDb() + 48 * v16);
    LODWORD(v18) = MiMapPageInHyperSpaceWorker(v16, 0i64, 0x80000000ui64);
    v19 = (UINT64 *)(v18 + 8 * ((v11 >> 3) & 0x1FF));
    *v19 = v8;
    MiUnmapPageInHyperSpaceWorker(v19, 0x11u, 0x80000000ui64);
    MiLockNestedPageAtDpcInline((INT64)v17);
    MiDecrementShareCount((UINT64)v17);
    LOBYTE(CurrentThread) = -1;
    _InterlockedAnd64(v17 + 3, 0x7FFFFFFFFFFFFFFFui64);
    return(char)CurrentThread;
  }
  v13 = 0;
  LODWORD(CurrentThread) = MiPteInShadowRange(v11);
  if( (_DWORD)CurrentThread )
  {
    LODWORD(CurrentThread) = MiPteHasShadow();
    if( (_DWORD)CurrentThread )
    {
      v13 = 1;
      if( !HIBYTE(word_140C4DD48) )
      {
        v15 = (v8 & 1) == 0;
        goto LABEL_15;
      }
    }
    else
    {
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      if( (*(_DWORD *)(*((_QWORD *)CurrentThread + 23) + 2172i64) & 0x1000) != 0 )
      {
        v15 = (v8 & 1) == 0;
LABEL_15:
        if( !v15 )
          v8 |= 0x8000000000000000ui64;
      }
    }
  }
  *(_QWORD *)v11 = v8;
  if( v13 )
    LOBYTE(CurrentThread) = MiWritePteShadow();
  if( (*(_BYTE *)(a1 + 184) & 7) == 0 )
    LOBYTE(CurrentThread) = _InterlockedExchangeAdd64((volatile signed __int64 *)(a1 - 392), 0xFFFFFFFFFFFFFFFFui64);
  return(char)CurrentThread;
}

Referenced by:

MiWsleFree