mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 20:05:41 +00:00
[NTOS:KE] Implement KiGetTrapContextInternal
This commit is contained in:
parent
f026550f89
commit
61b6cd9d28
3 changed files with 50 additions and 0 deletions
|
@ -473,6 +473,11 @@ KiGetUserModeStackAddress(void)
|
||||||
return &PsGetCurrentThread()->Tcb.TrapFrame->Rsp;
|
return &PsGetCurrentThread()->Tcb.TrapFrame->Rsp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
KiGetTrapContext(
|
||||||
|
_In_ PKTRAP_FRAME TrapFrame,
|
||||||
|
_Out_ PCONTEXT Context);
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
KiSetTrapContext(
|
KiSetTrapContext(
|
||||||
_Out_ PKTRAP_FRAME TrapFrame,
|
_Out_ PKTRAP_FRAME TrapFrame,
|
||||||
|
|
|
@ -292,6 +292,28 @@ KeTrapFrameToContext(IN PKTRAP_FRAME TrapFrame,
|
||||||
if (OldIrql < APC_LEVEL) KeLowerIrql(OldIrql);
|
if (OldIrql < APC_LEVEL) KeLowerIrql(OldIrql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
RtlGetUnwindContext(
|
||||||
|
_Out_ PCONTEXT Context,
|
||||||
|
_In_ DWORD64 TargetFrame);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
KiGetTrapContextInternal(
|
||||||
|
_In_ PKTRAP_FRAME TrapFrame,
|
||||||
|
_Out_ PCONTEXT Context)
|
||||||
|
{
|
||||||
|
ULONG64 TargetFrame;
|
||||||
|
|
||||||
|
/* Get the volatile register context from the trap frame */
|
||||||
|
KeTrapFrameToContext(TrapFrame, NULL, Context);
|
||||||
|
|
||||||
|
/* The target frame is MAX_SYSCALL_PARAM_SIZE bytes before the trap frame */
|
||||||
|
TargetFrame = (ULONG64)TrapFrame - MAX_SYSCALL_PARAM_SIZE;
|
||||||
|
|
||||||
|
/* Get the nonvolatiles on the stack */
|
||||||
|
RtlGetUnwindContext(Context, TargetFrame);
|
||||||
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
RtlSetUnwindContext(
|
RtlSetUnwindContext(
|
||||||
_In_ PCONTEXT Context,
|
_In_ PCONTEXT Context,
|
||||||
|
|
|
@ -1137,6 +1137,29 @@ KiConvertToGuiThreadFailed:
|
||||||
|
|
||||||
ENDFUNC
|
ENDFUNC
|
||||||
|
|
||||||
|
EXTERN KiGetTrapContextInternal:PROC
|
||||||
|
|
||||||
|
/*
|
||||||
|
* VOID
|
||||||
|
* KiGetTrapContext(
|
||||||
|
* _Out_ PKTRAP_FRAME TrapFrame,
|
||||||
|
* _In_ PCONTEXT Context);
|
||||||
|
*/
|
||||||
|
PUBLIC KiGetTrapContext
|
||||||
|
.PROC KiGetTrapContext
|
||||||
|
|
||||||
|
/* Generate a KEXCEPTION_FRAME on the stack */
|
||||||
|
GENERATE_EXCEPTION_FRAME
|
||||||
|
|
||||||
|
call KiGetTrapContextInternal
|
||||||
|
|
||||||
|
/* Restore the registers from the KEXCEPTION_FRAME */
|
||||||
|
RESTORE_EXCEPTION_STATE
|
||||||
|
|
||||||
|
/* Return */
|
||||||
|
ret
|
||||||
|
|
||||||
|
.ENDP
|
||||||
|
|
||||||
EXTERN KiSetTrapContextInternal:PROC
|
EXTERN KiSetTrapContextInternal:PROC
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue