MiCrcStillIntact

__int64 __fastcall MiCrcStillIntact(_QWORD *a1, __int64 a2, unsigned int a3, __int64 a4, int a5){
  UINT64 v5; 
  char *v9; 
  INT64 v10; 
  char *v11; 
  unsigned int v12; 
  UNICODE_STRING *v13; 
  UINT8 v14; 
  WCHAR *v15; 
  char v17; 
  int v18; 
  __int64 v19; 
  __int64 v20; 
  int v21; 
  INT64 v22; 
  RTL_BALANCED_NODE *Address; 
  int v24; 
  INT64 v25; 
  INT64 v26; 
  INT64 v27; 
  UINT64 SpinCount; 
  INT64 v29; 
  int result; 
  __int16 result_4; 
  int v32; 
  __int64 v33; 
  __int64 v34; 
  v5 = *(_QWORD *)(a4 + 8);
  memset((INT64)&result, 0i64);
  v9 = (char *)MmGetPteBase() + ((v5 >> 9) & 0x7FFFFFFFF8i64);
  if( !(unsigned int)MiRecheckVaVm(v10, v5) )
    return 0i64;
  v29 = MI_READ_PTE_LOCK_FREE((INT64)v9);
  if( (v29 & 1) == 0 )
    return 0i64;
  v11 = (char *)MmGetPfnDb() + 48 * (((unsigned __int64)MI_READ_PTE_LOCK_FREE((INT64)&v29) >> 12) & 0xFFFFFFFFFi64);
  LODWORD(SpinCount) = 0;
  while( _interlockedbittestandset64((volatile signed __int32 *)v11 + 6, 0x3Fui64) )
  {
    do
      KeYieldProcessorEx(&SpinCount);
    while( *((__int64 *)v11 + 3) < 0 );
  }
  v12 = MiCombineCandidate((_MI_PAGE_COMBINING_SUPPORT *)a1, (_MMPFN *)a3);
  v15 = (WCHAR *)v12;
  if( !v12 )
  {
    _InterlockedAnd64((volatile signed __int64 *)v11 + 3, 0x7FFFFFFFFFFFFFFFui64);
    return 0i64;
  }
  v17 = v11[34];
  _InterlockedAnd64((volatile signed __int64 *)v11 + 3, 0x7FFFFFFFFFFFFFFFui64);
  if( (v17 & 7) != 6 )
    return 0i64;
  if( v9 != (char *)(*((_QWORD *)v11 + 1) | 0x8000000000000000ui64) )
    return 0i64;
  LOBYTE(v18) = MI_PFN_IS_PROTO((UNICODE_STRING *)v11, v13, v14, v15);
  if( v18 )
    return 0i64;
  v19 = *((_QWORD *)v11 + 5);
  if( (v19 & 0x1000000000i64) != 0 )
    return 0i64;
  if( (v11[35] & 8) != 0 )
    return 0i64;
  v20 = v19 & 0xFFFFFFFFFi64;
  if( v20 == 0xFFFFFFFFDi64 )
    return 0i64;
  if( (MiGetWsleContents(v20, v5) & 0xF) == 8 )
    return 0i64;
  if( *((_WORD *)v11 + 16) != 1 )
    return 0i64;
  v22 = 0i64;
  if( v21 == 1 )
  {
    Address = MiLocateAddress(v5);
    if( !Address || !MiVadSupportsPrivateCommit((INT64)Address) )
      return 0i64;
  }
  if( a5 == 2 )
  {
    if( (v29 & 0x42) == 0 )
      return 0i64;
    MiMakeCombineCandidateClean((INT64)v9, v22);
  }
  else if( a5 == 3 )
  {
    v24 = MiTbFlushType(a2);
    LODWORD(v27) = 0;
    result_4 = 0;
    v33 = 0i64;
    v34 = 0i64;
    LODWORD(v26) = dword_140C4E568;
    result = v24;
    v32 = 20;
    if( !(unsigned int)MiClearPteAccessed(v25, (INT64)v11, (UINT64)v9, (INT64)&result, v26, v27) )
      return 0i64;
  }
  return 1i64;
}

Referenced by:

MiSharePages