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