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