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