MiStoreUpdatePagefileHash

VOID __fastcall MiStoreUpdatePagefileHash(INT64 a1, INT64 a2, MDL *a3, UINT64 a4){
  unsigned int v4; 
  MDL *v5; 
  unsigned int v6; 
  unsigned int v7; 
  __int64 v8; 
  unsigned int v9; 
  MDL *v10; 
  unsigned int v11; 
  int v12; 
  unsigned int PagingFileOffset; 
  char *v14; 
  unsigned int v15; 
  unsigned __int8 v16; 
  unsigned int v18; 
  v18 = a4;
  v4 = 0;
  v5 = a3 + 1;
  v6 = 0;
  v15 = 0;
  v7 = 0;
  v8 = 0i64;
  v9 = 0;
  v10 = a3;
  v11 = 16;
  if( (_DWORD)a4 )
  {
    do
    {
      if( v5->Next == (_MDL *)qword_140C4EAA8 )
      {
        v12 = 16;
        PagingFileOffset = v7;
      }
      else
      {
        v14 = (char *)MmGetPfnDb() + 48 * (__int64)v5->Next;
        v16 = MiLockPageInline((INT64)v14);
        v12 = (unsigned __int8)HIBYTE(*((_WORD *)v14 + 8)) >> 4;
        PagingFileOffset = MiGetPagingFileOffset((MMPTE *)(v14 + 16));
        _InterlockedAnd64((volatile signed __int64 *)v14 + 3, 0x7FFFFFFFFFFFFFFFui64);
        __writecr8(v16);
        v4 = v15;
        v10 = a3;
        if( !v8 )
          v8 = *(_QWORD *)(qword_140C4E388 + 8 * ((*((_QWORD *)v14 + 5) >> 39) & 0x3FFi64));
      }
      if( v11 == v12 && PagingFileOffset == v7 )
      {
        ++v6;
      }
      else
      {
        if( v11 != 16 )
          MiMapPageFileHash(*(_QWORD *)(v8 + 8i64 * v11 + 6944), (__int64)v10, v9 - v6, v4, v6);
        v4 = PagingFileOffset;
        v11 = v12;
        v15 = PagingFileOffset;
        v7 = PagingFileOffset;
        v6 = 1;
      }
      v10 = a3;
      ++v9;
      v5 = (MDL *)((char *)v5 + 8);
      ++v7;
    }
    while( v9 < v18 );
    if( v11 != 16 )
      MiMapPageFileHash(*(_QWORD *)(v8 + 8i64 * v11 + 6944), (__int64)a3, v9 - v6, v4, v6);
  }
}

Referenced by:

MiStoreWriteModifiedPages