MiStoreUpdatePagefileHash

VOID __stdcall MiStoreUpdatePagefileHash(_MDL *Mdl, UINT64 PageCount, _MDL *a3, UINT64 a4){
  unsigned int v4; 
  _MDL *v5; 
  int v6; 
  NTSTATUS v7; 
  __int64 v8; 
  unsigned int v9; 
  _MDL *v10; 
  unsigned int v11; 
  int v12; 
  NTSTATUS PagingFileOffset; 
  UINT64 ClusterSize; 
  _MMPFN *v15; 
  NTSTATUS ClusterStart; 
  UINT8 v17; 
  unsigned int v19; 

  v19 = a4;
  v4 = 0;
  v5 = a3 + 1;
  v6 = 0;
  ClusterStart = 0;
  v7 = 0;
  v8 = 0i64;
  v9 = 0;
  v10 = a3;
  v11 = 16;
  if( (_DWORD)a4 )
  {
    do
    {
      if( v5->Next == (_MDL *)*(&stru_140C4DB30 + 495) )
      {
        v12 = 16;
        PagingFileOffset = v7;
      }
      else
      {
        v15 = &MmGetPfnDb()[(__int64)v5->Next];
        v17 = MiLockPageInline(v15);
        v12 = (unsigned __int8)HIBYTE(*((_WORD *)&v15->3 + 8)) >> 4;
        PagingFileOffset = MiGetPagingFileOffset(&v15->OriginalPte);
        _InterlockedAnd64(&v15->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
        __writecr8(v17);
        v4 = ClusterStart;
        v10 = a3;
        if( !v8 )
          v8 = *(_QWORD *)(*(&stru_140C4DB30 + 267) + 8 * (((unsigned __int64)v15->u4._bf_0 >> 39) & 0x3FF));
      }
      if( v11 == v12 && PagingFileOffset == v7 )
      {
        ++v6;
      }
      else
      {
        if( v11 != 16 )
        {
          LODWORD(ClusterSize) = v6;
          MiMapPageFileHash(*(_MMPAGING_FILE **)(v8 + 8i64 * v11 + 6944), v10, v9 - v6, v4, ClusterSize);
        }
        v4 = PagingFileOffset;
        v11 = v12;
        ClusterStart = PagingFileOffset;
        v7 = PagingFileOffset;
        v6 = 1;
      }
      v10 = a3;
      ++v9;
      v5 = (_MDL *)((char *)v5 + 8);
      ++v7;
    }
    while( v9 < v19 );
    if( v11 != 16 )
    {
      LODWORD(ClusterSize) = v6;
      MiMapPageFileHash(*(_MMPAGING_FILE **)(v8 + 8i64 * v11 + 6944), a3, v9 - v6, v4, ClusterSize);
    }
  }
}

Referenced by:

MiStoreWriteModifiedPages