CcChargeDirtyPages
VOID __fastcall CcChargeDirtyPages(INT64 a1, INT64 a2, INT64 a3, UINT64 a4){
unsigned __int64 v4;
__int64 v8;
v4 = (unsigned int)a4;
if( a1 )
{
v8 = *(_QWORD *)(a1 + 528);
if( *(_QWORD *)(a1 + 168)
&& v8 != *(_QWORD *)(MmGetControlAreaPartition(*(_QWORD *)((*(_QWORD *)(a1 + 96) & 0xFFFFFFFFFFFFFFF0ui64) + 0x28))
+ 8) )
{
KeBugCheckEx(0x34u, 0x1313ui64, 0xFFFFFFFFC0000420ui64, 0i64, 0i64);
}
}
else
{
v8 = *((_QWORD *)PspSystemPartition + 1);
}
*(_QWORD *)(v8 + 640) += v4;
if( a2 )
*(_DWORD *)(a2 + 8) += v4;
if( a3 )
*(_DWORD *)(a3 + 32) += v4;
if( a1 )
{
*(_DWORD *)(a1 + 112) += v4;
_InterlockedExchangeAdd64((volatile signed __int64 *)(*(_QWORD *)(a1 + 504) + 32i64), v4);
if( (*(_DWORD *)(a1 + 152) & 0x1000000) != 0 )
{
_InterlockedExchangeAdd64((volatile signed __int64 *)(*(_QWORD *)(a1 + 240) + 24i64), v4);
if( *(_QWORD *)(*(_QWORD *)(a1 + 240) + 136i64) == -1i64 )
*(_QWORD *)(*(_QWORD *)(a1 + 240) + 136i64) = KUSER_SHARED_DATA.TickCountQuad;
}
}
if( *(_BYTE *)(v8 + 964) && *(_QWORD *)(v8 + 640) >= 0x2000ui64 )
CcScheduleLazyWriteScan(v8, 1u);
if( *(_BYTE *)(v8 + 140) )
{
CcScheduleLazyWriteScan(v8, 0);
*(_BYTE *)(v8 + 140) = 0;
}
CcAdjustWriteBehindThreadPoolIfNeeded(v8);
}Referenced by:
CcAddDirtyPagesToExternalCache
CcSetDirtyInMask
CcSetDirtyPinnedData