mirror of
https://github.com/reactos/reactos.git
synced 2025-08-01 18:13:48 +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;
|
||||
}
|
||||
|
||||
VOID
|
||||
KiGetTrapContext(
|
||||
_In_ PKTRAP_FRAME TrapFrame,
|
||||
_Out_ PCONTEXT Context);
|
||||
|
||||
VOID
|
||||
KiSetTrapContext(
|
||||
_Out_ PKTRAP_FRAME TrapFrame,
|
||||
|
|
|
@ -292,6 +292,28 @@ KeTrapFrameToContext(IN PKTRAP_FRAME TrapFrame,
|
|||
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
|
||||
RtlSetUnwindContext(
|
||||
_In_ PCONTEXT Context,
|
||||
|
|
|
@ -1137,6 +1137,29 @@ KiConvertToGuiThreadFailed:
|
|||
|
||||
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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue