RtlXSave
VOID __stdcall RtlXSave(_XSAVE_AREA *Buffer, UINT64 Mask){
unsigned int MxCsr;
unsigned int MxCsr_Mask;
if( (KUSER_SHARED_DATA.XState._bf_0 & 2) != 0 )
{
XSaveCHelper((INT64)Buffer, Mask);
}
else if( (Mask & 6) == 4 )
{
MxCsr = Buffer->LegacyState._MxCsr;
MxCsr_Mask = Buffer->LegacyState.MxCsr_Mask;
_xsave(Buffer, Mask);
Buffer->LegacyState._MxCsr = MxCsr;
Buffer->LegacyState.MxCsr_Mask = MxCsr_Mask;
}
else
{
_xsave(Buffer, Mask);
}
}Referenced by:
KeSaveExtendedAndSupervisorState
KiCaptureUmsThreadContext
KiSaveNpxState
KiSwapToUmsThread
RtlXSaveS
ViCtxCaptureInitialIsrState
ViCtxCheckAndReleaseIsrState