MiObtainPagefileHashes

VOID __stdcall MiObtainPagefileHashes(
        _MMPAGING_FILE *PagingFile,
        UINT64 PageFileOffset,
        UINT64 NumberOfEntries,
        UINT64 *PageHashValues){
  volatile int *p_SpinLock; 
  unsigned int v5; 
  __int64 v7; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 
  __int64 v11; 
  int v12; 

  p_SpinLock = &PagingFile->SpinLock;
  v5 = NumberOfEntries;
  v7 = (unsigned int)PageFileOffset;
  v9 = (unsigned __int8)ExAcquireSpinLockShared((INT64 *)&PagingFile->SpinLock);
  v10 = (unsigned __int64)&PagingFile->PageHash[v7];
  if( v5 )
  {
    v11 = v5;
    do
    {
      if( (*((_BYTE *)&MmGetPteBase()->u.Long + ((v10 >> 9) & 0x7FFFFFFFF8i64)) & 1) != 0 )
        v12 = *(_DWORD *)v10;
      else
        v12 = 0;
      *(_DWORD *)PageHashValues = v12;
      v10 += 4i64;
      PageHashValues = (UINT64 *)((char *)PageHashValues + 4);
      --v11;
    }
    while( v11 );
  }
  ExReleaseSpinLockSharedFromDpcLevel(p_SpinLock);
  __writecr8(v9);
}

Referenced by:

MiValidatePagefilePageHash