KiRestoreProcessorState
VOID __stdcall KiRestoreProcessorState(_KTRAP_FRAME *TrapFrame){
_KTRAP_FRAME *v1;
struct _KPRCB *CurrentPrcb;
_KTRAP_FRAME *v3;
_CONTEXT *Context;
UINT32 ContextFlags;
char v7;
_KPROCESSOR_MODE PreviousMode;
CurrentPrcb = KeGetCurrentPrcb();
v3 = v1;
Context = CurrentPrcb->Context;
ContextFlags = Context->ContextFlags;
v7 = Context->SegCs & 1;
if( !v7
&& ((ContextFlags & 0x100008) == 1048584 || (ContextFlags & 0x100040) == 1048640)
&& (ContextFlags & 0x100040) == 1048640
&& (KUSER_SHARED_DATA.XState.EnabledVolatileFeatures & 0xFFFFFFFC) != 0 )
{
RtlXRestore(
(_XSAVE_AREA *)((char *)&Context->1 + SLODWORD(Context[1].P3Home) + 464),
KUSER_SHARED_DATA.XState.EnabledVolatileFeatures & 0xFFFFFFFC);
}
LOBYTE(PreviousMode) = v7;
KeContextToKframes(TrapFrame, v3, Context, ContextFlags, PreviousMode);
KiRestoreProcessorControlState(&CurrentPrcb->ProcessorState);
}Referenced by:
KiFreezeTargetExecution