KiRestoreProcessorState
VOID __stdcall KiRestoreProcessorState(KTRAP_FRAME *TrapFrame){
_KEXCEPTION_FRAME *v1;
struct _KPRCB *CurrentPrcb;
_KEXCEPTION_FRAME *v3;
__int64 v5;
UINT64 v6;
CHAR PreviousMode;
CurrentPrcb = KeGetCurrentPrcb();
v3 = v1;
v5 = *((_QWORD *)CurrentPrcb + 4280);
v6 = *(unsigned int *)(v5 + 48);
PreviousMode = *(_BYTE *)(v5 + 56) & 1;
if( !PreviousMode
&& ((v6 & 0x100008) == 1048584 || (v6 & 0x100040) == 1048640)
&& (v6 & 0x100040) == 1048640
&& (KUSER_SHARED_DATA.XState.EnabledVolatileFeatures & 0xFFFFFFFC) != 0 )
{
RtlXRestore(
(XSAVE_AREA *)(*(int *)(v5 + 1248) + v5 + 720),
KUSER_SHARED_DATA.XState.EnabledVolatileFeatures & 0xFFFFFFFC);
}
KeContextToKframes(TrapFrame, v3, (_CONTEXT *)v5, v6, PreviousMode);
KiRestoreProcessorControlState((INT64)CurrentPrcb + 256);
}Referenced by:
KiFreezeTargetExecution