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