HalpBlkPoPerformPpmOperation
CHAR __stdcall HalpBlkPoPerformPpmOperation(){
__int64 v0;
int v1;
CHAR result;
v0 = *(_QWORD *)KeGetPcr();
if( _InterlockedCompareExchange((volatile signed __int32 *)(v0 + 2224), 2, 1) != 1 )
return 0;
if( *(_DWORD *)(v0 + 2228) == 3 )
{
*(_QWORD *)(*(_QWORD *)KeGetPcr() + 2256i64) = *(_QWORD *)(v0 + 2240);
}
else
{
v1 = *(_DWORD *)(v0 + 2232);
if( v1 == 1 )
{
HalpBlkPoPerformPpmOperationForMsr(v0 + 2216);
}
else if( v1 == 2 )
{
HalpBlkPoPerformPpmOperationForIoPort(v0 + 2216);
}
else
{
__debugbreak();
}
}
_InterlockedIncrement64((volatile signed __int64 *)(v0 + 128));
result = 1;
_InterlockedExchange((volatile __int32 *)(v0 + 2224), 0);
return result;
}Referenced by:
HalpBlkHandleIpi