KdPollBreakIn
UINT8 __stdcall KdPollBreakIn(){
__int64 v0;
UINT8 v2;
__int64 v3;
unsigned int *v4;
unsigned __int64 *v5;
unsigned __int64 v6;
_DWORD *v7;
__int64 v8;
unsigned __int64 v9;
__int16 v10;
if( KdPitchDebugger && !KdEventLoggingEnabled )
return 0;
v2 = 0;
if( (_BYTE)KdDebuggerEnabled || KdEventLoggingEnabled )
{
_disable();
LODWORD(v0) = KeGetPcr()->Prcb.Number;
v3 = (unsigned int)v0;
v4 = (unsigned int *)KdLogBuffer[v0];
if( v4 )
{
v5 = (unsigned __int64 *)&v4[4 * *v4 + 4];
v6 = __rdtsc();
*v5 = ((unsigned __int64)HIDWORD(v6) << 32) | (unsigned int)v6;
v5[1] = 4 * ((unsigned __int8)KdDebuggerNotPresent & 1u);
}
if( KdpContext.KdpControlCPending )
{
v2 = 1;
KdpContext.KdpControlCPending = 0;
}
else if( KxTryToAcquireSpinLock((INT32 *)&KdDebuggerLock) )
{
v2 = (unsigned int)KdReceivePacket(8i64, 0i64, 0i64, 0i64, 0i64) == 0;
KxReleaseSpinLock(&KdDebuggerLock);
}
v2 &= (unsigned __int8)KdDebuggerEnabled;
KdpControlCPressed |= v2;
v7 = (_DWORD *)KdLogBuffer[v3];
if( v7 )
{
v8 = (unsigned int)*v7;
v9 = __rdtsc();
*(_QWORD *)&v7[4 * v8 + 6] = v7[4 * v8 + 6] & 4 | (2 * ((unsigned __int8)KdDebuggerNotPresent & 1u)) | ((((unsigned __int64)HIDWORD(v9) << 32) | (unsigned int)v9) - *(_QWORD *)&v7[4 * v8 + 4]) & 0xFFFFFFFFFFFFFFF0ui64;
if( (_DWORD)v8 == 254 )
*v7 = 0;
else
*v7 = v8 + 1;
}
if( (v10 & 0x200) != 0 )
_enable();
}
return v2;
}Referenced by:
KdCheckForDebugBreak
KdInitSystem