_guard_retpoline_exit

void _guard_retpoline_exit(){
  unsigned __int8 BpbTrappedRetpolineExitSpecCtrl; 
  unsigned __int8 BpbTrappedBpbState; 
  signed __int64 v2; 

  _disable();
  BpbTrappedRetpolineExitSpecCtrl = KeGetPcr()->Prcb.BpbTrappedRetpolineExitSpecCtrl;
  if( KeGetPcr()->Prcb.BpbCurrentSpecCtrl != BpbTrappedRetpolineExitSpecCtrl )
  {
    __writegsbyte(0x27Au, BpbTrappedRetpolineExitSpecCtrl);
    __writemsr(0x48u, BpbTrappedRetpolineExitSpecCtrl);
  }
  BpbTrappedBpbState = KeGetPcr()->Prcb.BpbTrappedBpbState;
  if( (BpbTrappedBpbState & 0x10) != 0 )
  {
    __writemsr(0x49u, 1ui64);
    BpbTrappedBpbState = KeGetPcr()->Prcb.BpbTrappedBpbState;
  }
  if( (BpbTrappedBpbState & 0x40) != 0 )
    __flush_rsb();
  _mm_lfence();
  __writegsbyte(0x853u, KeGetPcr()->Prcb.BpbRetpolineState | 2);
  if( _bittest64(&v2, 9u) )
    _enable();
}

Referenced by:

KeExitRetpoline
_guard_retpoline_exit_indirect_rax
_guard_retpoline_import_r10