MiComputePageHash
NTSTATUS __stdcall MiComputePageHash(_MMPFN *Pfn1, VOID *MappingVa){
_QWORD *v2;
_QWORD *v3;
unsigned __int8 CurrentIrql;
unsigned int PagingFileOffset;
__int64 v7;
_QWORD *v8;
__int64 v9;
__int64 v10;
__int64 v11;
__int64 v12;
NTSTATUS result;
v2 = 0i64;
v3 = MappingVa;
if( MappingVa )
{
CurrentIrql = 17;
}
else
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
v2 = MiMapPageInHyperSpaceWorker(Pfn1 - MmGetPfnDb(), 0i64, 0i64);
v3 = v2;
}
PagingFileOffset = MiGetPagingFileOffset(&Pfn1->OriginalPte);
v7 = v3[1];
v8 = v3 + 2;
v9 = v3[2];
v10 = v3[3];
v11 = *v3 + PagingFileOffset;
do
{
v8 += 4;
v7 += *(v8 - 1);
v11 += *(v8 - 2);
v9 += *v8;
v10 += v8[1];
}
while( v8 - 2 != v3 + 508 );
v12 = v7 + v10 + v9 + v11;
if( v2 )
{
MiUnmapPageInHyperSpaceWorker(v2, 0x11u, 0i64);
__writecr8(CurrentIrql);
}
result = v12 + HIDWORD(v12);
if( (unsigned int)(v12 + HIDWORD(v12)) < 3 )
return 3;
return result;
}Referenced by:
MiValidatePagefilePageHash
MiWritePageFileHash