KeDeregisterBugCheckReasonCallback

VOID __stdcall KeDeregisterBugCheckReasonCallback(_KBUGCHECK_REASON_CALLBACK_RECORD *CallbackRecord){
  unsigned __int8 CurrentIrql; 
  bool v3; 
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *Blink; 
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(0xFui64);
  KxAcquireSpinLock(&KeBugCheckCallbackLock);
  if( CallbackRecord->State == 1 )
  {
    v3 = CallbackRecord->Reason == 1023;
    CallbackRecord->State = 0;
    if( v3 )
      _InterlockedAdd(&KiRecoveryCallbackCount, 0xFFFFFFFF);
    Flink = CallbackRecord->Entry.Flink;
    Blink = CallbackRecord->Entry.Blink;
    if( (_KBUGCHECK_REASON_CALLBACK_RECORD *)CallbackRecord->Entry.Flink->Blink != CallbackRecord
      || (_KBUGCHECK_REASON_CALLBACK_RECORD *)Blink->Flink != CallbackRecord )
    {
      __fastfail(3u);
    }
    Blink->Flink = Flink;
    Flink->Blink = Blink;
  }
  KxReleaseSpinLock(&KeBugCheckCallbackLock);
  __writecr8(CurrentIrql);
}

Referenced by:

No references.