MiComparePageHash

__int64 __fastcall MiComparePageHash(__int64 a1, unsigned int a2, int a3){
  INT64 *v3; 
  __int64 v4; 
  unsigned int v6; 
  int v8; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 
  UINT64 v11; 
  UINT64 v13; 
  v3 = (INT64 *)(a1 + 232);
  v4 = a2;
  v6 = 0;
  v8 = 0;
  v9 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(a1 + 232));
  v10 = *(_QWORD *)(a1 + 216) + 4 * v4;
  v13 = MI_READ_PTE_LOCK_FREE((INT64)MmGetPteBase() + ((v10 >> 9) & 0x7FFFFFFFF8i64));
  v11 = v13;
  if( (v13 & 1) != 0 && *(_DWORD *)v10 != a3 )
  {
    MiPteInShadowRange((UINT64)&v13);
    if( (*((_BYTE *)MmGetPfnDb() + 48 * ((v11 >> 12) & 0xFFFFFFFFFi64) + 34) & 0x10) != 0 )
    {
      if( !byte_140C4E5C0 )
        v8 = -1073741761;
    }
    else
    {
      *(_DWORD *)v10 = a3;
    }
    ExReleaseSpinLockExclusiveFromDpcLevel(v3);
    v6 = v8;
  }
  else
  {
    ExReleaseSpinLockExclusiveFromDpcLevel(v3);
  }
  __writecr8(v9);
  return v6;
}

Referenced by:

MiValidatePagefilePageHash