PopFxCompleteComponentActivation
LONG __fastcall PopFxCompleteComponentActivation(ULONG_PTR BugCheckParameter2, __int64 a2, char a3){
__int64 i;
LONG result;
__int64 v8;
bool v9;
UINT64 v10;
__int64 v11;
__int64 v12;
__int64 v13;
unsigned __int8 v14;
unsigned __int64 v15;
bool v16;
unsigned int v17;
_InterlockedOr((volatile signed __int32 *)(a2 + 88), 0x80000000);
KeSetEvent((PRKEVENT)(a2 + 104), 0);
if( a3 )
{
for( i = 0i64; (unsigned int)i < *(_DWORD *)(a2 + 188); i = (unsigned int)(i + 1) )
{
v8 = *(_QWORD *)(a2 + 192);
v9 = 0;
v10 = *(unsigned int *)(v8 + 8 * i);
v11 = *(unsigned int *)(v8 + 8 * i + 4);
v17 = *(_DWORD *)(v8 + 8 * i);
v12 = *(_QWORD *)(*(_QWORD *)(BugCheckParameter2 + 832) + 8 * v10);
KeAcquireSpinLockRaiseToDpc((UINT64 *)(v12 + 128), v10);
v13 = *(_QWORD *)(v12 + 176);
v15 = v14;
if( *(_BYTE *)(v13 + 8 * v11 + 4) == 1 )
{
*(_BYTE *)(v13 + 8 * v11 + 4) = 0;
v16 = (*(_DWORD *)(v12 + 184))-- == 1;
v9 = v16;
}
KxReleaseSpinLock((UINT64 *)(v12 + 128));
__writecr8(v15);
if( v9 )
PopPluginComponentActive(BugCheckParameter2, v17, 1, 0i64);
}
}
PopFxIdleComponent(BugCheckParameter2, *(unsigned int *)(a2 + 16), 1, 0i64);
result = _InterlockedExchangeAdd((volatile signed __int32 *)(BugCheckParameter2 + 244), 0xFFFFFFFF);
if( result == 1 )
return KeSetEvent((PRKEVENT)(BugCheckParameter2 + 248), 0);
return result;
}Referenced by:
PopFxActivateComponentWorker
PopFxIdleWorkerTail
PopFxProcessWork