MiComparePageHash

NTSTATUS __stdcall MiComparePageHash(_MMPAGING_FILE *PagingFile, UINT64 PageFileOffset, UINT64 PageHashValue){
  INT64 *p_SpinLock; 
  __int64 v4; 
  NTSTATUS v6; 
  unsigned int v7; 
  int v8; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 
  UINT64 v11; 
  UINT64 v12; 
  UINT64 v14; 

  p_SpinLock = (INT64 *)&PagingFile->SpinLock;
  v4 = (unsigned int)PageFileOffset;
  v6 = 0;
  v7 = PageHashValue;
  v8 = 0;
  v9 = (unsigned __int8)ExAcquireSpinLockExclusive((INT64 *)&PagingFile->SpinLock);
  v10 = (unsigned __int64)&PagingFile->PageHash[v4];
  LODWORD(v11) = MI_READ_PTE_LOCK_FREE((INT64)MmGetPteBase() + ((v10 >> 9) & 0x7FFFFFFFF8i64));
  v14 = v11;
  v12 = v11;
  if( (v11 & 1) != 0 && *(_DWORD *)v10 != v7 )
  {
    MiPteInShadowRange((UINT64)&v14);
    if( (*(_BYTE *)(&MmGetPfnDb()[(v12 >> 12) & 0xFFFFFFFFFi64].u3 + 1) & 0x10) != 0 )
    {
      if( !*(&stru_140C4DB30 + 2704) )
        v8 = -1073741761;
    }
    else
    {
      *(_DWORD *)v10 = v7;
    }
    ExReleaseSpinLockExclusiveFromDpcLevel(p_SpinLock);
    v6 = v8;
  }
  else
  {
    ExReleaseSpinLockExclusiveFromDpcLevel(p_SpinLock);
  }
  __writecr8(v9);
  return v6;
}

Referenced by:

MiValidatePagefilePageHash