KiRestoreIptState
UINT64 __fastcall KiRestoreIptState(UINT64 *a1){
int v1;
unsigned __int64 *v2;
unsigned __int64 *v3;
unsigned int i;
UINT64 result;
v1 = 0;
if( KiXSaveAreaLength )
{
v2 = a1 + 1;
if( (KiIptMsrMask & 2) != 0 )
{
__writemsr(0x560u, *v2);
v2 = a1 + 2;
}
if( (KiIptMsrMask & 4) != 0 )
__writemsr(0x561u, *v2++);
__writemsr(0x571u, *v2);
v3 = v2 + 1;
if( (KiIptMsrMask & 0x10) != 0 )
__writemsr(0x572u, *v3++);
for( i = 1409; i < 0x589; i += 2 )
{
if( !_bittest((const signed __int32 *)&KiIptMsrMask, v1 + 5) )
break;
__writemsr(i - 1, *v3);
__writemsr(i, v3[1]);
v3 += 2;
++v1;
}
result = *a1;
__writemsr(0x570u, *a1);
}
return result;
}Referenced by:
KeRestoreIptStateAfterProcessorComesOnline
KeRestoreSupervisorState
KiRestoreThreadIptState