KiEpfDrainCompletionQueue

VOID __stdcall KiEpfDrainCompletionQueue(){
  LIST_ENTRY *v0; 
  __int64 v1; 
  char v2; 
  v0 = 0i64;
  if( KiEpfCompletionQueue )
  {
    while( 1 )
    {
      KxAcquireSpinLock(&KiEpfCompletionQueueSpinLock);
      v1 = *(_QWORD *)KiEpfCompletionQueue;
      if( *(_QWORD *)KiEpfCompletionQueue == *(_QWORD *)(KiEpfCompletionQueue + 8) )
      {
        v2 = 0;
      }
      else
      {
        v0 = *(LIST_ENTRY **)(KiEpfCompletionQueue + 8 * v1 + 16);
        v2 = 1;
        *(_QWORD *)KiEpfCompletionQueue = (v1 + 1) % (unsigned __int64)(unsigned int)KiEpfCompletionQueueSize;
      }
      KxReleaseSpinLock(&KiEpfCompletionQueueSpinLock);
      if( !v2 )
        break;
      KiEpfComplete(v0);
    }
  }
}

Referenced by:

KeInitSystem
KeWaitPhysicalFaultCompletion
KiEpfCompletionDpcRoutine
KiEpfHandleNotification