_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