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