KdExitDebugger

VOID __stdcall KdExitDebugger(UINT8 Enable){
  __int64 v1; 
  _DWORD *v3; 
  __int64 v4; 
  unsigned __int64 v5; 

  KdEnteredDebugger = 0;
  LODWORD(v1) = KeGetPcr()->Prcb.Number;
  v3 = (_DWORD *)KdLogBuffer[v1];
  if( v3 )
  {
    v4 = (unsigned int)*v3;
    v5 = __rdtsc();
    *(_QWORD *)&v3[4 * v4 + 6] = v3[4 * v4 + 6] & 4 | (2 * ((unsigned __int8)KdDebuggerNotPresent & 1)) | 1u | ((((unsigned __int64)HIDWORD(v5) << 32) | (unsigned int)v5) - *(_QWORD *)&v3[4 * v4 + 4]) & 0xFFFFFFFFFFFFFFF1ui64;
    if( (_DWORD)v4 == 254 )
      *v3 = 0;
    else
      *v3 = v4 + 1;
  }
  off_140C008B8[0]();
  if( (KiBugCheckActive & 3) == 0 && !PoAllProcIntrDisabled )
  {
    KeRestoreSupervisorState((INT64)KeGetCurrentPrcb()->ExtendedSupervisorState, qword_140CF6290);
    qword_140CF6290 = 0i64;
  }
  KeThawExecution(Enable);
  if( KdTimerStop )
    KdTimerStart = __rdtsc();
  else
    KdTimerStart = 0i64;
  if( !PoHiberInProgress && (KiBugCheckActive & 3) == 0 )
  {
    if( !_InterlockedExchange(&KdpTimeSlipPending, 2) )
      KeInsertQueueDpc((UINT64)&KdpTimeSlipDpc, 0i64, 0i64);
    ExQueueDebuggerWorker();
  }
  if( VfIsVerifierEnabled() )
    VfNotifyVerifierOfEvent(4ui64);
}

Referenced by:

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