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