KdEnterDebugger

UINT8 __stdcall KdEnterDebugger(_KTRAP_FRAME *TrapFrame, _KTRAP_FRAME *ExceptionFrame){
  int v4; 
  unsigned __int8 CurrentIrql; 
  UINT8 v6; 
  UINT8 v7; 
  struct _KPRCB *CurrentPrcb; 
  __int64 Number; 
  INT64 ExtendedSupervisorState; 
  unsigned int *v11; 
  unsigned __int64 *v12; 
  unsigned __int64 v13; 
  UINT8 result; 

  v4 = 0;
  if( VfIsVerifierEnabled() )
    VfNotifyVerifierOfEvent(3ui64);
  if( TrapFrame )
  {
    KdTimerStop = __rdtsc();
    KdTimerDifference = KdTimerStop - KdTimerStart;
  }
  else
  {
    KdTimerStop = 0i64;
  }
  CurrentIrql = KeGetCurrentIrql();
  KeFreezeExecution(TrapFrame, (_KEXCEPTION_FRAME *)ExceptionFrame);
  v7 = v6;
  off_140C008C8[0]();
  CurrentPrcb = KeGetCurrentPrcb();
  Number = CurrentPrcb->Number;
  if( (KiBugCheckActive & 3) == 0 && !PoAllProcIntrDisabled )
  {
    ExtendedSupervisorState = (INT64)CurrentPrcb->ExtendedSupervisorState;
    qword_140CF6290 = ~*(&KiSwapEvent + 61) & (KUSER_SHARED_DATA.XState.EnabledSupervisorFeatures | 0x100);
    KeSaveSupervisorState(
      ExtendedSupervisorState,
      ~*(&KiSwapEvent + 61) & (KUSER_SHARED_DATA.XState.EnabledSupervisorFeatures | 0x100));
  }
  if( (KiBugCheckActive & 3) == 0 || (unsigned int)KiBugCheckActive >> 4 != (_DWORD)Number )
    CurrentPrcb->DebuggerSavedIRQL = CurrentIrql;
  v11 = (unsigned int *)KdLogBuffer[Number];
  if( v11 )
  {
    v12 = (unsigned __int64 *)&v11[4 * *v11 + 4];
    v13 = __rdtsc();
    *v12 = ((unsigned __int64)HIDWORD(v13) << 32) | (unsigned int)v13;
    v12[1] = (4 * ((unsigned __int8)KdDebuggerNotPresent & 1)) | 1u;
  }
  ++*(&KiSwapEvent + 124);
  result = v7;
  LOBYTE(v4) = KdPortLocked == 0;
  *(&KiSwapEvent + 125) += v4;
  KdEnteredDebugger = 1;
  return result;
}

Referenced by:

KdRefreshDebuggerNotPresent
KdSendTraceData
KdpCloseRemoteFile
KdpCommandString
KdpCreateRemoteFile
KdpPrint
KdpPrompt
KdpReadRemoteFile
KdpReport
KdpSetOwedBreakpoints
KdpSymbol
KiTpWriteMemory