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;
_FILE_OBJECT *v14;
__int128 v15;
__int64 v16;
__int128 *v17;
int v18;
int v19;
v4 = (_LIST_ENTRY *)*((_QWORD *)WorkEntry + 16);
v16 = 0i64;
v15 = 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(v16) = 2;
if( MasterLockHeld )
{
*((_QWORD *)&v15 + 1) = *(_QWORD *)((*(_QWORD *)(v10 + 96) & 0xFFFFFFFFFFFFFFF0ui64) + 0x18);
}
else
{
v14 = CcReferenceSharedCacheMapFileObject((_SHARED_CACHE_MAP *)v10);
*((_QWORD *)&v15 + 1) = v14->FsContext;
CcDereferenceSharedCacheMapFileObject((_SHARED_CACHE_MAP *)v10, v14);
}
break;
case 1:
v9 = *((_QWORD *)WorkEntry + 2);
BYTE1(v16) = 1;
*((_QWORD *)&v15 + 1) = *(_QWORD *)(v9 + 24);
break;
case 3:
BYTE1(v16) = 3;
break;
default:
v12 = BYTE1(v16);
if( v8 == 4 )
v12 = 4;
BYTE1(v16) = v12;
break;
}
LOBYTE(v16) = v7;
*(_QWORD *)&v15 = WorkEntry;
BYTE2(v16) = Requeue;
CurrentIrql = KeGetCurrentIrql();
v19 = 0;
v18 = 24;
v17 = &v15;
if( CurrentIrql >= 2u )
EtwTraceKernelEvent((__int64)&v17, 1u, 0x80020000, 0x1600u, 0x400102u);
else
EtwTraceKernelEvent((__int64)&v17, 1u, 0x80020000, 0x1600u, 0x401902u);
}Referenced by:
CcPostWorkQueueAsyncRead
CcPostWorkQueueCachemapUninit
CcPostWorkQueueRegular
CcWaitForCurrentLazyWriterActivityInternal
CcWorkerThread