KiEpfComplete

VOID __stdcall KiEpfComplete(_LIST_ENTRY *a1){
  __int64 v2; 
  _QWORD *v3; 
  _QWORD *v4; 
  _QWORD *v5; 
  _QWORD *v6; 
  __int64 v7; 

  v2 = KiEpfHashTable + 32i64 * (((unsigned int)a1 + (unsigned int)((unsigned __int64)a1 >> 12)) % 0x25);
  KxAcquireSpinLock((UINT64 *)(v2 + 16));
  v3 = *(_QWORD **)v2;
  v4 = *(_QWORD **)v2;
  if( *(_QWORD *)v2 == v2 )
  {
LABEL_5:
    ++*(_DWORD *)(v2 + 24);
    v4 = 0i64;
    goto LABEL_12;
  }
  do
  {
    v5 = (_QWORD *)*v4;
    if( (_LIST_ENTRY *)v4[2] == a1 )
    {
      if( (_QWORD *)v5[1] == v4 )
      {
        v6 = (_QWORD *)v4[1];
        if( (_QWORD *)*v6 == v4 )
        {
          *v6 = v5;
          v5[1] = v6;
          goto LABEL_12;
        }
      }
LABEL_15:
      __fastfail(3u);
    }
    v4 = (_QWORD *)*v4;
  }
  while( v5 != (_QWORD *)v2 );
  if( v3 == (_QWORD *)v2 )
    goto LABEL_5;
  v4 = *(_QWORD **)v2;
  if( v3[1] != v2 )
    goto LABEL_15;
  v7 = *v3;
  if( *(_QWORD **)(*v3 + 8i64) != v3 )
    goto LABEL_15;
  *(_QWORD *)v2 = v7;
  *(_QWORD *)(v7 + 8) = v2;
LABEL_12:
  KxReleaseSpinLock((UINT64 *)(v2 + 16));
  if( v4 )
  {
    _InterlockedIncrement(&dword_140C2AE44);
    KeSignalGate((_KGATE *)(v4 + 3), 0i64);
  }
}

Referenced by:

KiEpfDrainCompletionQueue