MiScanPagefileSpace
VOID __stdcall MiScanPagefileSpace(VOID *Context){
__int16 v1;
int v2;
PHYSICAL_MEMORY_DESCRIPTOR *v4;
_MMPFN *v5;
_MMPFN *v6;
_MMPTE *p_OriginalPte;
union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;} v8;
char v9;
_MMPTE v10;
UINT8 v11;
char v12;
union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;} v13;
INT64 v14;
UINT8 OldIrql;
__int16 v16;
int v17;
PHYSICAL_MEMORY_DESCRIPTOR *v18;
v1 = *(_WORD *)Context;
v16 = *(_WORD *)Context;
v2 = 0;
v17 = 0;
v4 = MiReferencePageRuns((ULONG_PTR *)Context, 0i64);
v18 = v4;
do
{
v5 = &MmGetPfnDb()[v4->Run[v2].BasePage];
v6 = &v5[v4->Run[v2].PageCount];
if( v5 < v6 )
{
p_OriginalPte = &v5->OriginalPte;
do
{
v8.Long = (unsigned __int64)p_OriginalPte[3].u;
if( ((v8.Long >> 39) & 0x3FF) == v1 )
{
v9 = BYTE2(p_OriginalPte[2].u.VolatileLong);
if( (((v9 & 7) - 2) & 0xFA) == 0
&& (v9 & 7) != 6
&& (p_OriginalPte->u.Long & 0x400) == 0
&& MiGetPagingFileOffset(p_OriginalPte)
&& (v8.Long & 0xFFFFFFFFFi64) != 0xFFFFFFFFDi64
&& LOWORD(p_OriginalPte[2].u.Long)
&& (v9 & 0x28) == 0
&& (p_OriginalPte[2].u.Hard._bf_0 & 0x10000000) == 0 )
{
v10.u.Long = 0i64;
v11 = MiLockPage(v5);
v12 = BYTE2(p_OriginalPte[2].u.VolatileLong);
OldIrql = v11;
if( (((v12 & 7) - 2) & 0xFA) == 0
&& (v12 & 7) != 6
&& (p_OriginalPte->u.Long & 0x400) == 0
&& MiGetPagingFileOffset(p_OriginalPte)
&& (p_OriginalPte[3].u.Long & 0xFFFFFFFFFi64) != 0xFFFFFFFFDi64
&& LOWORD(p_OriginalPte[2].u.Long)
&& (((v12 & 0x28) == 0) & (unsigned __int8)~(BYTE3(p_OriginalPte[2].u.Hard._bf_0) >> 4)) != 0 )
{
MiCaptureDirtyBitToPfn();
v10.u.Long = v13.Long;
}
MiUnlockPage(v5, OldIrql);
if( v10.u.Long )
MiReleasePageFileInfo((_MI_PARTITION *)Context, v10, 0i64);
}
v1 = v16;
}
++v5;
p_OriginalPte += 6;
}
while( v5 < v6 );
v2 = v17;
v4 = v18;
}
v17 = ++v2;
}
while( v2 != v4->NumberOfRuns );
MiDereferencePageRuns(v4);
v14 = *((_QWORD *)Context + 22);
*((_QWORD *)Context + 123) = 0i64;
PsDereferencePartition(v14);
}Referenced by:
No references.