MiCrcStillIntact

NTSTATUS __stdcall MiCrcStillIntact(
        _MI_PAGE_COMBINING_SUPPORT *Pcs,
        _MMSUPPORT_INSTANCE *Vm,
        _MI_PAGE_CRCS *PfnCrc,
        _MI_COMBINE_DEFER_TYPE DeferType){
  UINT64 v4; 
  unsigned int v5; 
  _MMPTE *v8; 
  _MMSUPPORT_INSTANCE *v9; 
  INT64 v10; 
  unsigned __int64 v11; 
  _MMPFN *v12; 
  _MI_COMBINE_CANDIDATE v13; 
  _UNICODE_STRING *v14; 
  UINT8 v15; 
  wchar_t *v16; 
  char v18; 
  int v19; 
  __int64 bf_0; 
  __int64 v21; 
  int v22; 
  _MMVAD *v23; 
  _MMVAD *Address; 
  int v25; 
  _KTBFLUSH_TYPE v26; 
  _MMSUPPORT_INSTANCE *v27; 
  _MI_TB_FLUSH_LIST *TbFlushList; 
  UINT64 v29; 
  UINT64 SpinCount; 
  INT64 v31; 
  _MMWSLE Wsle[48]; 
  int v33; 

  v4 = *(_QWORD *)(*(_QWORD *)&DeferType + 8i64);
  v5 = (unsigned int)PfnCrc;
  memset(Wsle, 0i64, 0xB8u);
  v8 = (_MMPTE *)((char *)MmGetPteBase() + ((v4 >> 9) & 0x7FFFFFFFF8i64));
  if( !MiRecheckVaVm(v9, (VOID *)v4) )
    return 0;
  LODWORD(v10) = MI_READ_PTE_LOCK_FREE((INT64)v8);
  v31 = v10;
  if( (v10 & 1) == 0 )
    return 0;
  LODWORD(v11) = MI_READ_PTE_LOCK_FREE((INT64)&v31);
  v12 = &MmGetPfnDb()[(v11 >> 12) & 0xFFFFFFFFFi64];
  LODWORD(SpinCount) = 0;
  while( _interlockedbittestandset64((volatile signed __int32 *)&v12->u2, 0x3Fui64) )
  {
    do
      KeYieldProcessorEx(&SpinCount);
    while( v12->u2._bf_0 < 0 );
  }
  v13 = MiCombineCandidate(Pcs, (_MMPFN *)v5);
  v16 = (wchar_t *)(unsigned int)v13;
  if( v13 == MiCombineNone )
  {
    _InterlockedAnd64(&v12->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
    return 0;
  }
  v18 = *((_BYTE *)&v12->u3 + 2);
  _InterlockedAnd64(&v12->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
  if( (v18 & 7) != 6 )
    return 0;
  if( v8 != (_MMPTE *)(v12->PteLong | 0x8000000000000000ui64) )
    return 0;
  LOBYTE(v19) = MI_PFN_IS_PROTO((_UNICODE_STRING *)v12, v14, v15, v16);
  if( v19 )
    return 0;
  bf_0 = v12->u4._bf_0;
  if( (bf_0 & 0x1000000000i64) != 0 )
    return 0;
  if( (*((_BYTE *)&v12->u3 + 3) & 8) != 0 )
    return 0;
  v21 = bf_0 & 0xFFFFFFFFFi64;
  if( v21 == 0xFFFFFFFFDi64 )
    return 0;
  if( (MiGetWsleContents(v21, v4) & 0xF) == 8 )
    return 0;
  if( v12->u3.ReferenceCount != 1 )
    return 0;
  v23 = 0i64;
  if( v22 == 1 )
  {
    Address = MiLocateAddress((VOID *)v4);
    if( !Address )
      return 0;
    LOBYTE(v25) = MiVadSupportsPrivateCommit((INT64)Address);
    if( !v25 )
      return 0;
  }
  if( v33 == 2 )
  {
    if( (v31 & 0x42) == 0 )
      return 0;
    MiMakeCombineCandidateClean(v8, v23);
  }
  else if( v33 == 3 )
  {
    v26 = MiTbFlushType(Vm);
    LODWORD(v29) = 0;
    LOWORD(Wsle[1]) = 0;
    *(_QWORD *)&Wsle[4] = 0i64;
    *(_QWORD *)&Wsle[6] = 0i64;
    LODWORD(TbFlushList) = *(&stru_140C4DB30 + 654);
    Wsle[0] = v26;
    Wsle[2] = 20;
    if( !MiClearPteAccessed(v27, v12, v8, Wsle, TbFlushList, v29) )
      return 0;
  }
  return 1;
}

Referenced by:

MiSharePages