KeWakeProcessor
UINT64 __stdcall KeWakeProcessor(){
struct _KPRCB *CurrentPrcb;
__int64 v1;
unsigned __int64 v2;
UINT64 result;
CurrentPrcb = KeGetCurrentPrcb();
v1 = *((unsigned int *)CurrentPrcb + 9);
*((_BYTE *)CurrentPrcb + 32410) = 0;
_InterlockedAnd64(
(volatile signed __int64 *)&KeSleepingProcessors.Bitmap[(unsigned __int64)(unsigned int)KiProcessorIndexToNumberMappingTable[v1] >> 6],
~(1i64 << (KiProcessorIndexToNumberMappingTable[v1] & 0x3F)));
v2 = __readcr4();
if( (v2 & 0x20080) != 0 )
{
result = v2 ^ 0x80;
__writecr4(v2 ^ 0x80);
__writecr4(v2);
}
else
{
result = __readcr3();
__writecr3(result);
}
return result;
}Referenced by:
KiHvInterrupt
KiIpiInterrupt
KiMcheckAbort
KiNmiInterruptStart
KiSwInterrupt
KiVmbusInterrupt0
KiVmbusInterrupt1
KiVmbusInterrupt2
KiVmbusInterrupt3
KxIsrLinkage
PpmIdleExecuteTransition