PopFxRequestWorker

VOID __stdcall PopFxRequestWorker(POHANDLE *PluginHandle){
  UINT64 v1; 
  KSEMAPHORE *v2; 
  __int64 v4; 
  int v5; 
  v2 = (KSEMAPHORE *)&PopFxSystemWorkPool;
  if( PluginHandle )
    v2 = (KSEMAPHORE *)(PluginHandle + 15);
  KeReleaseSemaphoreEx(v2 + 2, 0i64, 1i64, v1);
  if( !PluginHandle || ((_BYTE)PluginHandle[3] & 1) != 0 )
  {
    v4 = 0i64;
    while( 1 )
    {
      v5 = 1 << v4;
      _m_prefetchw(&v2[3]);
      if( (_InterlockedOr(&v2[3].Header.Lock, 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].Header.WaitListHead.Blink + (unsigned int)v4),
            (WORK_QUEUE_TYPE)48) )
      _InterlockedAnd(&v2[3].Header.Lock, ~v5);
  }
}

Referenced by:

PopPepRequestWork