MiScanPagefileSpace
VOID __stdcall MiScanPagefileSpace(PVOID Context){
__int16 v1;
int v2;
PHYSICAL_MEMORY_DESCRIPTOR *v4;
_MMPFN *v5;
_MMPFN *v6;
char *v7;
unsigned __int64 v8;
char v9;
UINT64 v10;
UINT8 v11;
char v12;
INT64 v13;
INT64 v14;
INT64 v15;
INT64 v16;
INT64 v17;
INT64 v18;
INT64 v19;
INT64 v20;
INT64 v21;
INT64 v22;
UINT8 OldIrql;
__int16 v24;
int v25;
PHYSICAL_MEMORY_DESCRIPTOR *v26;
v1 = *(_WORD *)Context;
v24 = *(_WORD *)Context;
v2 = 0;
v25 = 0;
v4 = MiReferencePageRuns((_MI_PARTITION *)Context, 0i64);
v26 = v4;
do
{
v5 = (_MMPFN *)((char *)MmGetPfnDb() + 48 * v4->Run[v2].BasePage);
v6 = (_MMPFN *)((char *)v5 + 48 * v4->Run[v2].PageCount);
if( v5 < v6 )
{
v7 = (char *)v5 + 16;
do
{
v8 = *((_QWORD *)v7 + 3);
if( ((v8 >> 39) & 0x3FF) == v1 )
{
v9 = v7[18];
if( (((v9 & 7) - 2) & 0xFA) == 0
&& (v9 & 7) != 6
&& (*(_DWORD *)v7 & 0x400i64) == 0
&& (unsigned int)MiGetPagingFileOffset((MMPTE *)v7)
&& (v8 & 0xFFFFFFFFFi64) != 0xFFFFFFFFDi64
&& *((_WORD *)v7 + 8)
&& (v9 & 0x28) == 0
&& (v7[19] & 0x10) == 0 )
{
v10 = 0i64;
v11 = MiLockPage((INT64)v5);
v12 = v7[18];
OldIrql = v11;
if( (((v12 & 7) - 2) & 0xFA) == 0
&& (v12 & 7) != 6
&& (*(_DWORD *)v7 & 0x400i64) == 0
&& (unsigned int)MiGetPagingFileOffset((MMPTE *)v7)
&& (*((_QWORD *)v7 + 3) & 0xFFFFFFFFFi64) != 0xFFFFFFFFDi64
&& *((_WORD *)v7 + 8)
&& (((v12 & 0x28) == 0) & (unsigned __int8)~((unsigned __int8)v7[19] >> 4)) != 0 )
{
v10 = MiCaptureDirtyBitToPfn((INT64)v5);
}
MiUnlockPage(v5, OldIrql);
if( v10 )
MiReleasePageFileInfo((INT64)Context, v10, 0, v13, v15, v16, v17, v18, v19, v20, v21, v22);
}
v1 = v24;
}
v5 = (_MMPFN *)((char *)v5 + 48);
v7 += 48;
}
while( v5 < v6 );
v2 = v25;
v4 = v26;
}
v25 = ++v2;
}
while( v2 != v4->NumberOfRuns );
MiDereferencePageRuns(v4);
v14 = *((_QWORD *)Context + 22);
*((_QWORD *)Context + 123) = 0i64;
PsDereferencePartition(v14);
}Referenced by:
No references.