IoReleaseCancelSpinLock

VOID *__stdcall IoReleaseCancelSpinLock(_KIRQL Irql){
  _KSPIN_LOCK_QUEUE *v1; 
  unsigned __int64 v2; 
  _KSPIN_LOCK_QUEUE *Next; 
  VOID *result; 

  v1 = (_KSPIN_LOCK_QUEUE *)((char *)KeGetPcr()->NtTib.ArbitraryUserPointer + 112);
  v2 = (unsigned __int8)Irql;
  _m_prefetchw(v1);
  Next = v1->Next;
  if( v1->Next )
    goto LABEL_5;
  if( v1 != (_KSPIN_LOCK_QUEUE *)_InterlockedCompareExchange64(
                                    (volatile signed __int64 *)v1->Lock,
                                    0i64,
                                    (signed __int64)v1) )
  {
    Next = KxWaitForLockChainValid(v1);
LABEL_5:
    v1->Next = 0i64;
    _InterlockedXor64((volatile signed __int64 *)&Next->Lock, 1ui64);
  }
  result = (VOID *)(unsigned int)KiIrqlFlags;
  __writecr8(v2);
  return result;
}

Referenced by:

FsRtlpRemoveAndCompleteRHIrp