CcIncrementWriteBehindPriority
VOID __fastcall CcIncrementWriteBehindPriority(INT64 a1, INT64 a2, UINT8 *a3){
void *v3;
__int64 v4;
_QWORD *v5;
__int64 v7;
unsigned __int64 v8;
__int64 v9;
_QWORD *v10;
unsigned __int64 *v11;
_QWORD *v12;
__int64 *v13;
__int64 v14;
struct _KLOCK_QUEUE_HANDLE LockHandle;
v4 = *(_QWORD *)(a1 + 496);
v5 = 0i64;
*(_QWORD *)&LockHandle.OldIrql = 0i64;
v7 = *(_QWORD *)(a1 + 528);
if( v4 && (v4 & 1) == 0 )
{
LockHandle.LockQueue.Next = 0i64;
LockHandle.LockQueue.Lock = (unsigned __int64 *volatile)(v7 + 192);
KxAcquireQueuedSpinLock((PIO_WORKITEM)&LockHandle, (PIO_WORKITEM_ROUTINE)(v7 + 192), (WORK_QUEUE_TYPE)a3, v3);
v8 = *(_QWORD *)(a1 + 496);
if( !v8 )
{
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
return;
}
*(_QWORD *)(a1 + 496) = v8 | 1;
v9 = *(_QWORD *)v8;
if( *(_QWORD *)(*(_QWORD *)v8 + 8i64) == v8 )
{
v10 = *(_QWORD **)(v8 + 8);
if( *v10 == v8 )
{
*v10 = v9;
*(_QWORD *)(v9 + 8) = v10;
*(_QWORD *)(v8 + 8) = 0i64;
*(_QWORD *)v8 = 0i64;
v11 = *(unsigned __int64 **)(v7 + 232);
if( *v11 == v7 + 224 )
{
*(_QWORD *)v8 = v7 + 224;
*(_QWORD *)(v8 + 8) = v11;
*v11 = v8;
*(_QWORD *)(v7 + 232) = v8;
if( *(_BYTE *)(v7 + 352)
|| (v12 = (_QWORD *)(v7 + 208), v13 = *(__int64 **)(v7 + 208), v13 == (__int64 *)(v7 + 208)) )
{
LABEL_15:
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
if( v5 )
{
*v5 = 0i64;
ExQueueWorkItemToPartition(v5);
}
return;
}
v5 = *(_QWORD **)(v7 + 208);
if( (_QWORD *)v13[1] == v12 )
{
v14 = *v13;
if( *(_QWORD **)(v14 + 8) == v5 )
{
*v12 = v14;
*(_QWORD *)(v14 + 8) = v12;
++*(_DWORD *)(v7 + 204);
if( _InterlockedIncrement64((volatile signed __int64 *)(v7 + 968)) <= 1 )
__fastfail(0xEu);
goto LABEL_15;
}
}
}
}
}
__fastfail(3u);
}
}Referenced by:
CcLazyWriteScan