KeWakeProcessor
UINT64 __stdcall KeWakeProcessor(){
struct _KPRCB *CurrentPrcb;
__int64 Number;
unsigned __int64 v2;
UINT64 result;
CurrentPrcb = KeGetCurrentPrcb();
Number = CurrentPrcb->Number;
CurrentPrcb->DeepSleep = 0;
_InterlockedAnd64(
(volatile signed __int64 *)&KeSleepingProcessors.Bitmap[(unsigned __int64)(unsigned int)KiProcessorIndexToNumberMappingTable[Number] >> 6],
~(1i64 << (KiProcessorIndexToNumberMappingTable[Number] & 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