PopFxProcessWorkPool

NTSTATUS __stdcall PopFxProcessWorkPool(INT64 a1, UINT64 a2){
  __int64 v2; 
  _ETHREAD *CurrentThread; 
  __int64 v5; 
  _LARGE_INTEGER *v6; 
  NTSTATUS result; 
  NTSTATUS v8; 
  signed __int32 v9; 
  signed __int32 v10; 
  INT64 *v11; 
  VOID *Object[2]; 
  _LARGE_INTEGER v13; 

  v2 = (unsigned int)a2;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v5 = (_DWORD)a2 != -1;
  if( (_DWORD)a2 == -1 )
    *(_QWORD *)(a1 + 264) = CurrentThread;
  else
    *(_QWORD *)(a1 + 8i64 * (unsigned int)a2 + 272) = CurrentThread;
  *(__m128i *)Object = _mm_add_epi64(
                         _mm_slli_epi64(_mm_unpacklo_epi32(_mm_load_si128((const __m128i *)&_xmm), (__m128i)0i64), 5u),
                         _mm_unpacklo_epi64((__m128i)(unsigned __int64)(a1 + 32), (__m128i)(unsigned __int64)(a1 + 32)));
  while( 1 )
  {
    v13.QuadPart = 0i64;
    if( KeWaitForSingleObject(a1 + 32 * ((int)v5 + 1i64), 0, 0, 0, (INT64)&v13) != 258 )
    {
      v8 = v5;
      goto LABEL_10;
    }
    if( (_DWORD)v2 == -1 )
    {
      v6 = 0i64;
    }
    else
    {
      v13.QuadPart = -50000i64;
      v6 = &v13;
    }
    result = KeWaitForMultipleObjects(2ui64, Object, WaitAny, Executive, 0, 0, v6, 0i64);
    v8 = result;
    if( result == 258 )
      break;
LABEL_10:
    if( v8 )
    {
      if( v8 == 1 )
        PopFxDispatchPluginWorkOnce(*(_QWORD *)a1);
    }
    else
    {
      v11 = ExInterlockedRemoveHeadList((INT64 **)(a1 + 16), (INT32 *)(a1 + 8));
      *(_OWORD *)v11 = 0i64;
      ((void(__fastcall *)(INT64))v11[2])(v11[3]);
    }
    if( (_DWORD)v2 == -1 )
    {
      _m_prefetchw((const void *)(a1 + 96));
      v9 = *(_DWORD *)(a1 + 96);
      do
      {
        v10 = v9;
        v9 = _InterlockedCompareExchange((volatile signed __int32 *)(a1 + 96), v9, v9);
      }
      while( v10 != v9 );
      if( v9 )
        LODWORD(v5) = 0;
      else
        LODWORD(v5) = ((int)v5 + 1) % 2;
    }
  }
  *(_QWORD *)(a1 + 8 * v2 + 272) = 0i64;
  _InterlockedAnd((volatile signed __int32 *)(a1 + 96), ~(1 << v2));
  return result;
}

Referenced by:

PopFxEmergencyWorker
PopFxPluginWork