HalpBlkApicWrite

_EXCEPTION_REGISTRATION_RECORD *__stdcall HalpBlkApicWrite(INT64 a1, UINT64 a2){
  _EXCEPTION_REGISTRATION_RECORD *ExceptionList; 
  _EXCEPTION_REGISTRATION_RECORD *result; 

  ExceptionList = KeGetPcr()->NtTib.ExceptionList;
  if( BYTE1(ExceptionList[2].Handler) || LOBYTE(ExceptionList[2].Handler) )
  {
    result = (_EXCEPTION_REGISTRATION_RECORD *)(unsigned int)a2;
    __writemsr(((int)a1 >> 4) + 2048, (unsigned int)a2);
  }
  else
  {
    result = KeGetPcr()->NtTib.ExceptionList[2].Next;
    *(_DWORD *)((char *)&result->Next + (int)a1) = a2;
  }
  return result;
}

Referenced by:

HalpBlkApicEndOfInterrupt
HalpBlkApicInitializeLocalUnit