HalpBlkPoPerformPpmOperation
INT8 __stdcall HalpBlkPoPerformPpmOperation(){
_EXCEPTION_REGISTRATION_RECORD *ExceptionList;
int Handler;
INT8 result;
ExceptionList = KeGetPcr()->NtTib.ExceptionList;
if( _InterlockedCompareExchange((volatile signed __int32 *)&ExceptionList[139], 2, 1) != 1 )
return 0;
if( HIDWORD(ExceptionList[139].Next) == 3 )
{
KeGetPcr()->NtTib.ExceptionList[141].Next = ExceptionList[140].Next;
}
else
{
Handler = (int)ExceptionList[139].Handler;
if( Handler == 1 )
{
HalpBlkPoPerformPpmOperationForMsr((INT64)&ExceptionList[138].Handler);
}
else if( Handler == 2 )
{
HalpBlkPoPerformPpmOperationForIoPort((INT64)&ExceptionList[138].Handler);
}
else
{
__debugbreak();
}
}
_InterlockedIncrement64((volatile signed __int64 *)&ExceptionList[8]);
result = 1;
_InterlockedExchange((volatile __int32 *)&ExceptionList[139], 0);
return result;
}Referenced by:
HalpBlkHandleIpi