CcPostWorkQueueRegular
NTSTATUS __stdcall CcPostWorkQueueRegular(_WORK_QUEUE_ENTRY *WorkEntry, _LIST_ENTRY *WorkQueue){
__int64 v2;
_QWORD *v3;
_LIST_ENTRY *Blink;
_QWORD *v7;
__int64 *v8;
__int64 v9;
NTSTATUS result;
unsigned __int64 v11;
_KLOCK_QUEUE_HANDLE LockHandle;
v2 = *((_QWORD *)WorkEntry + 16);
v3 = 0i64;
memset(&LockHandle, 0, sizeof(LockHandle));
if( (xmmword_140CFB490 & 0x20000) != 0 )
CcPerfLogWorkItemEnqueue(WorkQueue, WorkEntry, 0, ((*((_BYTE *)WorkEntry + 120) - 2) & 0xFD) == 0);
KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)(v2 + 192), &LockHandle);
if( *((_BYTE *)WorkEntry + 120) == 3 && *(_QWORD *)(v2 + 256) != v2 + 256 )
{
v11 = *(_QWORD *)(v2 + 640);
if( (v11 >= *(_QWORD *)(v2 + 664) >> 2 || v11 > *(_QWORD *)(**(_QWORD **)(v2 + 8) + 7104i64) >> 1)
&& *(_DWORD *)(v2 + 960) >= *(_DWORD *)(v2 + 200) )
{
*(_BYTE *)(v2 + 776) = 1;
}
}
Blink = WorkQueue->Blink;
if( Blink->Flink != WorkQueue )
goto LABEL_22;
*(_QWORD *)WorkEntry = WorkQueue;
*((_QWORD *)WorkEntry + 1) = Blink;
Blink->Flink = (_LIST_ENTRY *)WorkEntry;
WorkQueue->Blink = (_LIST_ENTRY *)WorkEntry;
if( *(_BYTE *)(v2 + 352) )
goto LABEL_11;
v7 = (_QWORD *)(v2 + 208);
v8 = *(__int64 **)(v2 + 208);
if( v8 == (__int64 *)(v2 + 208)
|| *((_BYTE *)WorkEntry + 120) == 2 && (unsigned int)(*(_DWORD *)(v2 + 368) + 1) > *(_DWORD *)(v2 + 960) )
{
goto LABEL_11;
}
v3 = *(_QWORD **)(v2 + 208);
v9 = *v8;
if( (_QWORD *)v8[1] != v7 || *(__int64 **)(v9 + 8) != v8 )
LABEL_22:
__fastfail(3u);
*v7 = v9;
*(_QWORD *)(v9 + 8) = v7;
++*(_DWORD *)(v2 + 204);
if( _InterlockedIncrement64((volatile signed __int64 *)(v2 + 968)) <= 1 )
__fastfail(0xEu);
LABEL_11:
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
result = KiIrqlFlags;
__writecr8(LockHandle.OldIrql);
if( v3 )
{
*v3 = 0i64;
return ExQueueWorkItemToPartition(v3);
}
return result;
}Referenced by:
CcPostWorkQueue