CcPostDeferredWrites
VOID __stdcall CcPostDeferredWrites(){
__int64 v0;
UINT8 *v1;
_QWORD *v2;
unsigned int v3;
UINT64 *v4;
_QWORD *v5;
unsigned __int8 v6;
_QWORD *v7;
unsigned __int64 v8;
UINT64 v9;
unsigned int v10;
__int64 v11;
_QWORD *v12;
_KEVENT *v13;
v1 = (UINT8 *)v0;
v2 = (_QWORD *)(v0 + 784);
v3 = 0;
v4 = (UINT64 *)(v0 + 832);
while( 2 )
{
v5 = 0i64;
v6 = KeAcquireSpinLockRaiseToDpc(v4);
v7 = (_QWORD *)*v2;
v8 = v6;
while( v7 != v2 )
{
v5 = v7 - 3;
if( v1[966] > 1u )
goto LABEL_11;
v9 = *((unsigned int *)v5 + 4);
v10 = v9 + v3;
if( CcCanIWriteStreamEx(v1, v5[1], v9, v3, 2, 0i64)
&& (!*((_BYTE *)v5 + 80)
|| (__int64)KUSER_SHARED_DATA.TickCountQuad >= (__int64)(10000
* dword_140C50810
/ (unsigned __int64)(unsigned int)KeMaximumIncrement
+ v5[11])) )
{
v3 = v10;
LABEL_11:
v11 = *v7;
v12 = (_QWORD *)v5[4];
if( *(_QWORD **)(*v7 + 8i64) != v7 || (_QWORD *)*v12 != v7 )
__fastfail(3u);
*v12 = v11;
*(_QWORD *)(v11 + 8) = v12;
break;
}
v7 = (_QWORD *)*v7;
v5 = 0i64;
}
KxReleaseSpinLock(v4);
__writecr8(v8);
if( v5 )
{
v13 = (_KEVENT *)v5[5];
if( v13 )
{
KeSetEvent(v13, 0, 0);
}
else
{
((void(__fastcall *)(_QWORD, _QWORD))v5[6])(v5[7], v5[8]);
ExFreePoolWithTag(v5, 0x77446343u);
CcDereferencePartition((INT64)v1);
}
continue;
}
break;
}
}Referenced by:
CcCanIWrite
CcDeductDirtyPagesFromExternalCache
CcDeferWrite
CcExitPartition
CcFlushCachePriv
CcLazyWriteScan
CcNotifyOfMappedWriteComplete
CcUnpinRepinnedBcb