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