CmpWorkerEngineWorker
VOID __stdcall CmpWorkerEngineWorker(PVOID NotUsed){
_QWORD *v1;
__int64 v2;
int v3;
int v4[10];
while( 1 )
{
ExAcquireFastMutex(&CmpWorkerEngineLock);
v1 = *(_QWORD **)CmpWorkerEngineListHead;
if( *(INT64(__fastcall **)(INT64))CmpWorkerEngineListHead == CmpWorkerEngineListHead )
break;
if( *(INT64(__fastcall **)(INT64))(*(_QWORD *)CmpWorkerEngineListHead + 8i64) != CmpWorkerEngineListHead
|| (v2 = *(_QWORD *)CmpWorkerEngineListHead,
*(_QWORD *)(*(_QWORD *)CmpWorkerEngineListHead + 8i64) != *(_QWORD *)CmpWorkerEngineListHead) )
{
__fastfail(3u);
}
*(_QWORD *)CmpWorkerEngineListHead = *(_QWORD *)CmpWorkerEngineListHead;
*(_QWORD *)(v2 + 8) = CmpWorkerEngineListHead;
v1[1] = v1;
*v1 = v1;
KeReleaseGuardedMutex(&CmpWorkerEngineLock);
v3 = *((_DWORD *)v1 + 4);
((void(__fastcall *)(_QWORD))v1[3])(v1[4]);
if( !v3 )
ExFreePoolWithTag(v1, 0);
}
CmpWorkerEngineWorkItemActive = 0;
KeReleaseGuardedMutex(&CmpWorkerEngineLock);
_InterlockedOr(v4, 0);
if( CmpWorkerEngineFinishedEvent.0 )
ExfUnblockPushLock(&CmpWorkerEngineFinishedEvent, 0i64);
}Referenced by:
No references.