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