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