MiObtainPagefileHashes
VOID __stdcall MiObtainPagefileHashes(
_MMPAGING_FILE *PagingFile,
UINT64 PageFileOffset,
UINT64 NumberOfEntries,
UINT64 *PageHashValues){
volatile int *p_SpinLock;
unsigned int v5;
__int64 v7;
unsigned __int64 v9;
unsigned __int64 v10;
__int64 v11;
int v12;
p_SpinLock = &PagingFile->SpinLock;
v5 = NumberOfEntries;
v7 = (unsigned int)PageFileOffset;
v9 = (unsigned __int8)ExAcquireSpinLockShared((INT64 *)&PagingFile->SpinLock);
v10 = (unsigned __int64)&PagingFile->PageHash[v7];
if( v5 )
{
v11 = v5;
do
{
if( (*((_BYTE *)&MmGetPteBase()->u.Long + ((v10 >> 9) & 0x7FFFFFFFF8i64)) & 1) != 0 )
v12 = *(_DWORD *)v10;
else
v12 = 0;
*(_DWORD *)PageHashValues = v12;
v10 += 4i64;
PageHashValues = (UINT64 *)((char *)PageHashValues + 4);
--v11;
}
while( v11 );
}
ExReleaseSpinLockSharedFromDpcLevel(p_SpinLock);
__writecr8(v9);
}Referenced by:
MiValidatePagefilePageHash