DbgpRemoveDebugPrintCallback

__int64 __fastcall DbgpRemoveDebugPrintCallback(_LIST_ENTRY *a1){
  unsigned __int8 CurrentIrql; 
  unsigned int v3; 
  _LIST_ENTRY *i; 
  _EX_RUNDOWN_REF *p_Blink; 
  unsigned __int64 Count; 
  _EX_RUNDOWN_REF **v8; 

  CurrentIrql = KeGetCurrentIrql();
  __writecr8(0xCui64);
  v3 = 0;
  ExAcquireSpinLockSharedAtDpcLevel((PEX_SPIN_LOCK)&unk_140CEC520);
  for( i = (_LIST_ENTRY *)*(&stru_140C00F40 + 892); ; i = i->Flink )
  {
    if( i == (_LIST_ENTRY *)((char *)&stru_140C00F40 + 7136) )
    {
      ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)&unk_140CEC520);
      __writecr8(CurrentIrql);
      return(unsigned int)-1073741275;
    }
    p_Blink = (_EX_RUNDOWN_REF *)&i[-2].Blink;
    if( i[-1].Blink == a1 )
    {
      _m_prefetchw(p_Blink);
      if( (_InterlockedOr((volatile signed __int32 *)p_Blink, 1u) & 1) == 0 )
        break;
    }
  }
  ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)&unk_140CEC520);
  ExWaitForRundownProtectionRelease(p_Blink + 1);
  ExAcquireSpinLockExclusiveAtDpcLevel(&unk_140CEC520);
  Count = p_Blink[3].Count;
  v8 = (_EX_RUNDOWN_REF **)p_Blink[4].Count;
  if( *(_EX_RUNDOWN_REF **)(Count + 8) != &p_Blink[3] || *v8 != &p_Blink[3] )
    __fastfail(3u);
  *v8 = (_EX_RUNDOWN_REF *)Count;
  *(_QWORD *)(Count + 8) = v8;
  if( v8 == (_EX_RUNDOWN_REF **)Count )
    byte_140C50450 = 0;
  ExReleaseSpinLockExclusiveFromDpcLevel(&unk_140CEC520);
  __writecr8(CurrentIrql);
  ExFreePoolWithTag(p_Blink, 0);
  return v3;
}

Referenced by:

DbgSetDebugPrintCallback