IoReleaseRemoveLockEx

VOID __stdcall IoReleaseRemoveLockEx(IO_REMOVE_LOCK *PublicLock, PVOID Tag, UINT64 RemlockSize){
  char v5; 
  _LIST_ENTRY *p_WaitListHead; 
  unsigned __int8 v7; 
  unsigned __int64 v8; 
  _LIST_ENTRY *Flink; 
  PVOID *p_Flink; 
  _LIST_ENTRY *v11; 
  PVOID **v12; 
  if( (_DWORD)RemlockSize == 120 )
  {
    v5 = 0;
    KeAcquireSpinLockRaiseToDpc((UINT64 *)&PublicLock[2].Common.RemoveEvent, (UINT64)Tag);
    p_WaitListHead = &PublicLock[3].Common.RemoveEvent.Header.WaitListHead;
    v8 = v7;
    Flink = PublicLock[3].Common.RemoveEvent.Header.WaitListHead.Flink;
    p_Flink = (PVOID *)&Flink->Flink;
    if( Flink )
    {
      do
      {
        if( v5 || p_Flink[1] != Tag )
        {
          Flink = (_LIST_ENTRY *)p_Flink;
          p_Flink = (PVOID *)*p_Flink;
        }
        else
        {
          v11 = (_LIST_ENTRY *)*p_Flink;
          v5 = 1;
          if( p_Flink == (PVOID *)p_WaitListHead->Flink )
          {
            p_WaitListHead->Flink = v11;
            v12 = (PVOID **)&PublicLock[3].Common.RemoveEvent.Header.WaitListHead;
          }
          else
          {
            Flink->Flink = v11;
            v12 = (PVOID **)Flink;
          }
          ExFreePoolWithTag(p_Flink, 0);
          p_Flink = *v12;
        }
      }
      while( p_Flink );
    }
    KxReleaseSpinLock((UINT64 *)&PublicLock[2].Common.RemoveEvent);
    __writecr8(v8);
    if( !v5
      && _InterlockedDecrement((volatile signed __int32 *)&PublicLock[2].Common.RemoveEvent.Header.WaitListHead) < 0
      && ((MmVerifierData & 0x800) == 0
       || !(unsigned int)VfRemLockReportBadReleaseTag((ULONG_PTR)PublicLock, (ULONG_PTR)Tag)) )
    {
      _InterlockedIncrement((volatile signed __int32 *)&PublicLock[2].Common.RemoveEvent.Header.WaitListHead);
    }
  }
  if( _InterlockedExchangeAdd(&PublicLock->Common.IoCount, 0xFFFFFFFF) == 1 )
    KeSetEvent(&PublicLock->Common.RemoveEvent, 0);
}

Referenced by:

ViFilterDeviceUsageNotificationCompletion
ViFilterGenericCompletionRoutine
ViFilterStartCompletionRoutine