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