From de34ab04c1f0ce5dfadeef9628817b09f222d363 Mon Sep 17 00:00:00 2001 From: Thomas Bluemel Date: Fri, 20 Oct 2006 13:45:52 +0000 Subject: [PATCH] Fix returning the context of the current thread in NtGetContextThread svn path=/trunk/; revision=24580 --- reactos/ntoskrnl/ps/debug.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/reactos/ntoskrnl/ps/debug.c b/reactos/ntoskrnl/ps/debug.c index 51488a74ed6..e4fcd574f13 100644 --- a/reactos/ntoskrnl/ps/debug.c +++ b/reactos/ntoskrnl/ps/debug.c @@ -174,8 +174,7 @@ PsGetContextThread(IN PETHREAD Thread, Size = sizeof(CONTEXT); /* Read the flags */ - ProbeForReadUlong(&ThreadContext->ContextFlags); - Flags = ThreadContext->ContextFlags; + Flags = ProbeForReadUlong(&ThreadContext->ContextFlags); /* Check if the caller wanted extended registers */ if ((Flags & CONTEXT_EXTENDED_REGISTERS) != @@ -256,11 +255,19 @@ PsGetContextThread(IN PETHREAD Thread, FALSE, NULL); } - - /* Copy the context */ - RtlMoveMemory(ThreadContext, &GetSetContext.Context, Size); } + _SEH_TRY + { + /* Copy the context */ + RtlCopyMemory(ThreadContext, &GetSetContext.Context, Size); + } + _SEH_HANDLE + { + Status = _SEH_GetExceptionCode(); + } + _SEH_END; + /* Return status */ return Status; } @@ -285,8 +292,7 @@ PsSetContextThread(IN PETHREAD Thread, Size = sizeof(CONTEXT); /* Read the flags */ - ProbeForReadUlong(&ThreadContext->ContextFlags); - Flags = ThreadContext->ContextFlags; + Flags = ProbeForReadUlong(&ThreadContext->ContextFlags); /* Check if the caller wanted extended registers */ if ((Flags & CONTEXT_EXTENDED_REGISTERS) != @@ -304,7 +310,7 @@ PsSetContextThread(IN PETHREAD Thread, } /* Copy the context */ - RtlMoveMemory(&GetSetContext.Context, ThreadContext, Size); + RtlCopyMemory(&GetSetContext.Context, ThreadContext, Size); } _SEH_HANDLE {