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