[NTOS:KE/x64] Implement KiSaveProcessorState / KiRestoreProcessorState

This commit is contained in:
Timo Kreuzer 2023-12-06 21:09:13 +02:00
parent 1d289fec77
commit af2ce4d08f
2 changed files with 43 additions and 3 deletions

View File

@ -1024,9 +1024,14 @@ KiSaveProcessorControlState(
VOID
NTAPI
KiSaveProcessorState(
IN PKTRAP_FRAME TrapFrame,
IN PKEXCEPTION_FRAME ExceptionFrame
);
_In_ PKTRAP_FRAME TrapFrame,
_In_ PKEXCEPTION_FRAME ExceptionFrame);
VOID
NTAPI
KiRestoreProcessorState(
_Out_ PKTRAP_FRAME TrapFrame,
_Out_ PKEXCEPTION_FRAME ExceptionFrame);
VOID
FASTCALL

View File

@ -612,6 +612,41 @@ KiSaveProcessorControlState(OUT PKPROCESSOR_STATE ProcessorState)
ProcessorState->SpecialRegisters.MsrSyscallMask = __readmsr(X86_MSR_SFMASK);
}
VOID
NTAPI
KiSaveProcessorState(
_In_ PKTRAP_FRAME TrapFrame,
_In_ PKEXCEPTION_FRAME ExceptionFrame)
{
PKPRCB Prcb = KeGetCurrentPrcb();
/* Save all context */
Prcb->ProcessorState.ContextFrame.ContextFlags = CONTEXT_ALL;
KeTrapFrameToContext(TrapFrame, ExceptionFrame, &Prcb->ProcessorState.ContextFrame);
/* Save control registers */
KiSaveProcessorControlState(&Prcb->ProcessorState);
}
VOID
NTAPI
KiRestoreProcessorState(
_Out_ PKTRAP_FRAME TrapFrame,
_Out_ PKEXCEPTION_FRAME ExceptionFrame)
{
PKPRCB Prcb = KeGetCurrentPrcb();
/* Restore all context */
KeContextToTrapFrame(&Prcb->ProcessorState.ContextFrame,
ExceptionFrame,
TrapFrame,
CONTEXT_ALL,
TrapFrame->PreviousMode);
/* Restore control registers */
KiRestoreProcessorControlState(&Prcb->ProcessorState);
}
VOID
NTAPI
KeFlushEntireTb(IN BOOLEAN Invalid,