PopFxIdleWorker
VOID __stdcall PopFxIdleWorker(POP_FX_DEVICE *FxDevice, UINT64 Component, PEP_WORK_INFORMATION *WorkInfo){
unsigned int v4;
__int64 v6;
unsigned __int64 v7;
char v8;
void(__fastcall *v9)(_QWORD, _QWORD);
v4 = Component;
v6 = *(_QWORD *)(*((_QWORD *)FxDevice + 104) + 8i64 * (unsigned int)Component);
v7 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)(v6 + 128));
if( _InterlockedCompareExchange((volatile signed __int32 *)(v6 + 88), 0x40000000, 0x80000000) != 0x80000000 )
{
KxReleaseSpinLock((UINT64 *)(v6 + 128));
__writecr8(v7);
return;
}
KeResetEvent((_KEVENT *)(v6 + 104));
*(_DWORD *)(v6 + 136) = 2;
v8 = 0;
v9 = (void(__fastcall *)(_QWORD, _QWORD))*((_QWORD *)FxDevice + 15);
if( !v9 )
{
_InterlockedExchangeAdd((volatile signed __int32 *)(v6 + 136), 0xFFFFFFFE);
goto LABEL_4;
}
v9(*((_QWORD *)FxDevice + 24), v4);
if( _InterlockedExchangeAdd((volatile signed __int32 *)(v6 + 136), 0xFFFFFFFF) == 1 )
{
LABEL_4:
v8 = 1;
goto LABEL_5;
}
PopFxAddLogEntry(*((_QWORD *)FxDevice + 6), v4, 13, 0i64);
LABEL_5:
KxReleaseSpinLock((UINT64 *)(v6 + 128));
__writecr8(v7);
if( v8 )
PopFxIdleWorkerTail(FxDevice, v4, WorkInfo);
}Referenced by:
PopFxComponentWork
PopFxIdleComponent