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