CcPostWorkQueueCachemapUninit
NTSTATUS __stdcall CcPostWorkQueueCachemapUninit(_WORK_QUEUE_ENTRY *WorkEntry, _LIST_ENTRY *WorkQueue){
__int64 v2;
_QWORD *v3;
_LIST_ENTRY *Blink;
_QWORD *v7;
__int64 *v8;
NTSTATUS result;
__int64 v10;
_KLOCK_QUEUE_HANDLE LockHandle;
v2 = *((_QWORD *)WorkEntry + 16);
v3 = 0i64;
memset(&LockHandle, 0, sizeof(LockHandle));
if( (xmmword_140CFB490 & 0x20000) != 0 )
CcPerfLogWorkItemEnqueue(WorkQueue, WorkEntry, 0, 1u);
KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)(v2 + 192), &LockHandle);
Blink = WorkQueue->Blink;
if( Blink->Flink != WorkQueue )
goto LABEL_12;
*((_QWORD *)WorkEntry + 1) = Blink;
*(_QWORD *)WorkEntry = WorkQueue;
Blink->Flink = (_LIST_ENTRY *)WorkEntry;
v7 = (_QWORD *)(v2 + 328);
WorkQueue->Blink = (_LIST_ENTRY *)WorkEntry;
v8 = *(__int64 **)(v2 + 328);
if( v8 == (__int64 *)(v2 + 328) )
goto LABEL_5;
v3 = *(_QWORD **)(v2 + 328);
v10 = *v8;
if( (_QWORD *)v3[1] != v7 || *(_QWORD **)(v10 + 8) != v3 )
LABEL_12:
__fastfail(3u);
*v7 = v10;
*(_QWORD *)(v10 + 8) = v7;
++*(_DWORD *)(v2 + 344);
if( _InterlockedIncrement64((volatile signed __int64 *)(v2 + 968)) <= 1 )
__fastfail(0xEu);
LABEL_5:
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
result = KiIrqlFlags;
__writecr8(LockHandle.OldIrql);
if( v3 )
{
*v3 = 0i64;
return ExQueueWorkItemToPartition(v3);
}
return result;
}Referenced by:
CcPostWorkQueue