ExDereferenceCallBackBlock

VOID __stdcall ExDereferenceCallBackBlock(_EX_CALLBACK *CallBack, _EX_RUNDOWN_REF *CallBackBlock){
  signed __int64 v2; 
  signed __int64 v3; 

  _m_prefetchw(CallBack);
  v2 = *(_QWORD *)CallBack->RoutineBlock;
  if( ((unsigned __int64)CallBackBlock ^ *(_QWORD *)CallBack->RoutineBlock) >= 0xF )
  {
LABEL_4:
    ExReleaseRundownProtection(CallBackBlock);
  }
  else
  {
    while( 1 )
    {
      v3 = v2;
      v2 = _InterlockedCompareExchange64((volatile signed __int64 *)CallBack, v2 + 1, v2);
      if( v3 == v2 )
        break;
      if( ((unsigned __int64)CallBackBlock ^ v2) >= 0xF )
        goto LABEL_4;
    }
  }
}

Referenced by:

DbgkLkmdRegisterCallback
DbgkLkmdUnregisterCallback
DbgkpLkmdFireCallbacks
ExCallCallBack
ExCallSessionCallBack
PoUnregisterCoalescingCallback
PsCallImageNotifyRoutines
PsInvokeWin32Callout
PsRemoveCreateThreadNotifyRoutine
PsRemoveLoadImageNotifyRoutine
PspCallProcessNotifyRoutines
PspCallThreadNotifyRoutines
PspSetCreateProcessNotifyRoutine