KeTestAlertThread
UINT8 __stdcall KeTestAlertThread(INT8 AlertMode){
_ETHREAD *CurrentThread;
__int64 v2;
unsigned __int8 CurrentIrql;
UINT8 v4;
UINT64 SpinCount;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v2 = AlertMode;
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
LODWORD(SpinCount) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)CurrentThread + 16, 0i64) )
{
do
KeYieldProcessorEx(&SpinCount);
while( *((_QWORD *)CurrentThread + 8) );
}
v4 = *((_BYTE *)CurrentThread + v2 + 114);
if( v4 )
{
*((_BYTE *)CurrentThread + v2 + 114) = 0;
}
else if( (_BYTE)v2 == 1 && *((_ETHREAD **)CurrentThread + 21) != (_ETHREAD *)((char *)CurrentThread + 168) )
{
*((_BYTE *)CurrentThread + 194) |= 2u;
}
KiReleaseThreadLockSafe((INT64)CurrentThread);
__writecr8(CurrentIrql);
return v4;
}Referenced by:
DbgkpSendErrorMessage
KiContinueEx
KiDeliverApc
NtTestAlert