KiTestForAlertPending
NTSTATUS __stdcall KiTestForAlertPending(_ETHREAD *WaitThread, UINT8 Alertable, INT8 WaitMode, UINT64 Consume){
NTSTATUS v4;
v4 = 0;
if( !Alertable )
{
if( (WaitThread->Tcb.ApcState.UserApcPendingAll & 2) != 0 && WaitMode )
return 192;
return v4;
}
if( WaitThread->Tcb.Alerted[WaitMode] )
{
if( (_DWORD)Consume )
WaitThread->Tcb.Alerted[WaitMode] = 0;
return 257;
}
if( WaitMode && (unsigned __int8 *)WaitThread->Tcb.ApcState.ApcListHead[1].Flink != &WaitThread->Tcb.ApcStateFill[16] )
{
if( (_DWORD)Consume )
WaitThread->Tcb.ApcState.UserApcPendingAll |= 2u;
return 192;
}
if( WaitThread->Tcb.Alerted[0] )
{
if( (_DWORD)Consume )
WaitThread->Tcb.Alerted[0] = 0;
return 257;
}
return v4;
}Referenced by:
KeRemoveQueueEx
KiResumeThread