PopFxCompleteComponentActivation

VOID __stdcall PopFxCompleteComponentActivation(
        POP_FX_DEVICE *FxDevice,
        POP_FX_COMPONENT *FxComponent,
        UINT8 ActivateDependents){
  __int64 i; 
  __int64 v7; 
  bool v8; 
  __int64 v9; 
  __int64 v10; 
  unsigned __int8 v11; 
  __int64 v12; 
  unsigned __int64 v13; 
  bool v14; 
  unsigned int Component; 

  _InterlockedOr(FxComponent + 22, 0x80000000);
  KeSetEvent((PRKEVENT)(FxComponent + 26), 0, 0);
  if( ActivateDependents )
  {
    for( i = 0i64; (unsigned int)i < FxComponent[47]; i = (unsigned int)(i + 1) )
    {
      v7 = *((_QWORD *)FxComponent + 24);
      v8 = 0;
      v9 = *(unsigned int *)(v7 + 8 * i + 4);
      Component = *(_DWORD *)(v7 + 8 * i);
      v10 = *(_QWORD *)(*((_QWORD *)FxDevice + 104) + 8i64 * Component);
      v11 = KeAcquireSpinLockRaiseToDpc((UINT64 *)(v10 + 128));
      v12 = *(_QWORD *)(v10 + 176);
      v13 = v11;
      if( *(_BYTE *)(v12 + 8 * v9 + 4) == 1 )
      {
        *(_BYTE *)(v12 + 8 * v9 + 4) = 0;
        v14 = (*(_DWORD *)(v10 + 184))-- == 1;
        v8 = v14;
      }
      KxReleaseSpinLock((UINT64 *)(v10 + 128));
      __writecr8(v13);
      if( v8 )
        PopPluginComponentActive(FxDevice, Component, 1u, 0i64);
    }
  }
  PopFxIdleComponent((POHANDLE *)FxDevice, (unsigned int)FxComponent[4], 1ui64, 0i64);
  if( _InterlockedExchangeAdd(FxDevice + 61, 0xFFFFFFFF) == 1 )
    KeSetEvent((PRKEVENT)(FxDevice + 62), 0, 0);
}

Referenced by:

PopFxActivateComponentWorker
PopFxIdleWorkerTail
PopFxProcessWork