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