KdEnterDebugger

UINT8 __stdcall KdEnterDebugger(KTRAP_FRAME *TrapFrame, KTRAP_FRAME *ExceptionFrame){
  int v4; 
  unsigned __int8 CurrentIrql; 
  UINT8 v6; 
  struct _KPRCB *CurrentPrcb; 
  __int64 v8; 
  INT64 v9; 
  unsigned int *v10; 
  unsigned __int64 *v11; 
  unsigned __int64 v12; 
  UINT8 result; 
  v4 = 0;
  if( (unsigned int)VfIsVerifierEnabled() )
    VfNotifyVerifierOfEvent(3ui64);
  if( TrapFrame )
  {
    KdTimerStop = __rdtsc();
    KdTimerDifference = KdTimerStop - KdTimerStart;
  }
  else
  {
    KdTimerStop = 0i64;
  }
  CurrentIrql = KeGetCurrentIrql();
  v6 = KeFreezeExecution(TrapFrame, (_KEXCEPTION_FRAME *)ExceptionFrame);
  off_140C008C8[0]();
  CurrentPrcb = KeGetCurrentPrcb();
  v8 = *((unsigned int *)CurrentPrcb + 9);
  if( (KiBugCheckActive & 3) == 0 && !PoAllProcIntrDisabled )
  {
    v9 = *((_QWORD *)CurrentPrcb + 216);
    qword_140CF6290 = ~KdIgnoredSavingSupervisorXStateFeatures & (KUSER_SHARED_DATA.XState.EnabledSupervisorFeatures | 0x100);
    KeSaveSupervisorState(
      v9,
      ~KdIgnoredSavingSupervisorXStateFeatures & (KUSER_SHARED_DATA.XState.EnabledSupervisorFeatures | 0x100));
  }
  if( (KiBugCheckActive & 3) == 0 || (unsigned int)KiBugCheckActive >> 4 != (_DWORD)v8 )
    *((_BYTE *)CurrentPrcb + 32408) = CurrentIrql;
  v10 = (unsigned int *)KdLogBuffer[v8];
  if( v10 )
  {
    v11 = (unsigned __int64 *)&v10[4 * *v10 + 4];
    v12 = __rdtsc();
    *v11 = ((unsigned __int64)HIDWORD(v12) << 32) | (unsigned int)v12;
    v11[1] = (4 * ((unsigned __int8)KdDebuggerNotPresent & 1)) | 1u;
  }
  ++KdDebuggerEnteredCount;
  result = v6;
  LOBYTE(v4) = KdPortLocked == 0;
  KdDebuggerEnteredWithoutLock += v4;
  KdEnteredDebugger = 1;
  return result;
}

Referenced by:

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