CcPerfLogWorkItemEnqueue
VOID __stdcall CcPerfLogWorkItemEnqueue(
_LIST_ENTRY *WorkQueue,
_WORK_QUEUE_ENTRY *WorkEntry,
UINT8 Requeue,
UINT8 MasterLockHeld){
_LIST_ENTRY *v4;
char v7;
char v8;
__int64 v9;
INT64 v10;
unsigned __int8 CurrentIrql;
char v12;
_LIST_ENTRY *Flink;
CHAR *v14;
UINT64 Flag;
__int128 v16;
__int64 v17;
EVENT_DATA_DESCRIPTOR EventData;
v4 = (_LIST_ENTRY *)*((_QWORD *)WorkEntry + 16);
v17 = 0i64;
v16 = 0i64;
if( WorkQueue == &v4[14] )
{
v7 = 1;
}
else if( WorkQueue == &v4[18] )
{
v7 = 7;
}
else if( WorkQueue == &v4[15] )
{
v7 = 2;
}
else if( WorkQueue == &v4[16] )
{
v7 = 3;
}
else if( WorkQueue == &v4[17] )
{
v7 = 4;
}
else
{
Flink = v4[54].Flink;
if( WorkQueue == Flink || WorkQueue == &Flink[1] || WorkQueue == &Flink[2] )
v7 = 5;
else
v7 = WorkQueue == 0i64 ? 6 : 0;
}
v8 = *((_BYTE *)WorkEntry + 120);
switch( v8 )
{
case 2:
v10 = *((_QWORD *)WorkEntry + 2);
BYTE1(v17) = 2;
if( MasterLockHeld )
{
*((_QWORD *)&v16 + 1) = *(_QWORD *)((*(_QWORD *)(v10 + 96) & 0xFFFFFFFFFFFFFFF0ui64) + 0x18);
}
else
{
v14 = CcReferenceSharedCacheMapFileObject(v10);
*((_QWORD *)&v16 + 1) = *((_QWORD *)v14 + 3);
CcDereferenceSharedCacheMapFileObject(v10, (UINT64)v14);
}
break;
case 1:
v9 = *((_QWORD *)WorkEntry + 2);
BYTE1(v17) = 1;
*((_QWORD *)&v16 + 1) = *(_QWORD *)(v9 + 24);
break;
case 3:
BYTE1(v17) = 3;
break;
default:
v12 = BYTE1(v17);
if( v8 == 4 )
v12 = 4;
BYTE1(v17) = v12;
break;
}
LOBYTE(v17) = v7;
*(_QWORD *)&v16 = WorkEntry;
BYTE2(v17) = Requeue;
CurrentIrql = KeGetCurrentIrql();
EventData.Reserved = 0;
EventData.Size = 24;
EventData.Ptr = (unsigned __int64)&v16;
if( CurrentIrql >= 2u )
LODWORD(Flag) = 4194562;
else
LODWORD(Flag) = 4200706;
EtwTraceKernelEvent(&EventData, 1ui64, 0x80020000ui64, 0x1600u, Flag);
}Referenced by:
CcPostWorkQueueAsyncRead
CcPostWorkQueueCachemapUninit
CcPostWorkQueueRegular
CcWaitForCurrentLazyWriterActivityInternal
CcWorkerThread