PopFxActivateComponentWorker

VOID __stdcall PopFxActivateComponentWorker(
        POP_FX_DEVICE *FxDevice,
        POP_FX_COMPONENT *FxComponent,
        UINT8 InitActivate,
        PEP_WORK_INFORMATION *WorkInfo){
  UINT8 v5; 
  char v8; 
  UINT64 *v9; 
  unsigned __int8 v10; 
  POP_FX_COMPONENT v11; 
  __int64 v12; 
  unsigned __int64 v13; 
  bool v14; 
  __int64 v15; 
  __int64 v16; 

  v5 = InitActivate;
  PopFxAddRefDevice(FxDevice);
  if( FxComponent[43] )
  {
    v9 = (UINT64 *)(FxComponent + 32);
    v10 = KeAcquireSpinLockRaiseToDpc((UINT64 *)FxComponent + 16);
    v11 = FxComponent[43];
    v12 = 0i64;
    v13 = v10;
    FxComponent[46] = v11;
    v14 = v11 == 0;
    if( v11 )
    {
      do
      {
        v15 = *((_QWORD *)FxComponent + 22);
        v16 = *(_QWORD *)(*((_QWORD *)FxDevice + 104) + 8i64 * *(unsigned int *)(v15 + 8 * v12));
        *(_BYTE *)(v15 + 8 * v12 + 4) = 1;
        PopFxActivateComponent((_POP_FX_DEVICE *)FxDevice, (_POP_FX_COMPONENT *)v16, 2ui64, InitActivate);
        if( *(int *)(v16 + 88) < 0 )
        {
          *(_BYTE *)(*((_QWORD *)FxComponent + 22) + 8 * v12 + 4) = 0;
          --FxComponent[46];
        }
        v12 = (unsigned int)(v12 + 1);
      }
      while( (unsigned int)v12 < FxComponent[43] );
      v5 = InitActivate;
      v9 = (UINT64 *)(FxComponent + 32);
      v14 = FxComponent[46] == 0;
    }
    v8 = v14;
    KxReleaseSpinLock(v9);
    __writecr8(v13);
  }
  else
  {
    v8 = 1;
  }
  if( v5 )
  {
    PopFxCompleteComponentActivation(FxDevice, FxComponent, 0);
  }
  else if( v8 )
  {
    if( PopPluginComponentActive(FxDevice, (unsigned int)FxComponent[4], 1u, WorkInfo) == 1 )
      PopFxProcessWork(0i64, WorkInfo);
  }
}

Referenced by:

PoFxActivateComponent
PopFxActivateComponent
PopFxIdleWorkerTail