RtlXSave
VOID __stdcall RtlXSave(XSAVE_AREA *Buffer, UINT64 Mask){
unsigned int MxCsr;
unsigned int MxCsr_Mask;
if( (KUSER_SHARED_DATA.XState.ControlFlags & 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