PopFxRequestWorker
VOID __stdcall PopFxRequestWorker(POHANDLE *PluginHandle){
VOID *v1;
_KSEMAPHORE *v2;
__int64 v4;
int v5;
UINT64 v6;
v2 = (_KSEMAPHORE *)((char *)&stru_140C23628 + 4408);
if( PluginHandle )
v2 = (_KSEMAPHORE *)(PluginHandle + 15);
LODWORD(v6) = 0;
KeReleaseSemaphoreEx(v2 + 2, 0i64, 1i64, v1, v6);
if( !PluginHandle || ((_BYTE)PluginHandle[3] & 1) != 0 )
{
v4 = 0i64;
while( 1 )
{
v5 = 1 << v4;
_m_prefetchw(&v2[3]);
if( (_InterlockedOr((volatile signed __int32 *)&v2[3], 1 << v4) & (1 << v4)) == 0 )
break;
v4 = (unsigned int)(v4 + 1);
if( (unsigned int)v4 >= 4 )
return;
}
if( !ExTryQueueWorkItem((_WORK_QUEUE_ITEM *)&v2[v4 + 3].gap0[8 * (unsigned int)v4 + 16], (_WORK_QUEUE_TYPE)48) )
_InterlockedAnd((volatile signed __int32 *)&v2[3], ~v5);
}
}Referenced by:
PopPepRequestWork