From 7425fd9bf821bbc11d4378fea66631035cbabd72 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Sun, 4 Jan 2009 17:33:47 +0000 Subject: [PATCH] - DbgkpSendApiMessage/DbgkpSendApiMessageLpc: Make sure the process is suspended before resuming it. Also, DbgkpSendApiMessage takes a BOOLEAN as 2nd parameter. - DbgkpWakeTarget: Correct a check for a Debug Event flag svn path=/trunk/; revision=38568 --- reactos/ntoskrnl/dbgk/dbgkobj.c | 16 +++++++++------- reactos/ntoskrnl/include/internal/dbgk.h | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/reactos/ntoskrnl/dbgk/dbgkobj.c b/reactos/ntoskrnl/dbgk/dbgkobj.c index 3e07142d0f1..334dbf2817c 100644 --- a/reactos/ntoskrnl/dbgk/dbgkobj.c +++ b/reactos/ntoskrnl/dbgk/dbgkobj.c @@ -209,10 +209,11 @@ DbgkpSendApiMessageLpc(IN OUT PDBGKM_MSG Message, { NTSTATUS Status; UCHAR Buffer[PORT_MAXIMUM_MESSAGE_LENGTH]; + BOOLEAN Suspended = FALSE; PAGED_CODE(); /* Suspend process if required */ - if (SuspendProcess) DbgkpSuspendProcess(); + if (SuspendProcess) Suspended = DbgkpSuspendProcess(); /* Set return status */ Message->ReturnedStatus = STATUS_PENDING; @@ -232,21 +233,22 @@ DbgkpSendApiMessageLpc(IN OUT PDBGKM_MSG Message, if (NT_SUCCESS(Status)) RtlCopyMemory(Message, Buffer, sizeof(DBGKM_MSG)); /* Resume the process if it was suspended */ - if (SuspendProcess) DbgkpResumeProcess(); + if (Suspended) DbgkpResumeProcess(); return Status; } NTSTATUS NTAPI DbgkpSendApiMessage(IN OUT PDBGKM_MSG ApiMsg, - IN ULONG Flags) + IN BOOLEAN SuspendProcess) { NTSTATUS Status; + BOOLEAN Suspended = FALSE; PAGED_CODE(); - DBGKTRACE(DBGK_MESSAGE_DEBUG, "ApiMsg: %p Flags: %lx\n", ApiMsg, Flags); + DBGKTRACE(DBGK_MESSAGE_DEBUG, "ApiMsg: %p SuspendProcess: %lx\n", ApiMsg, SuspendProcess); /* Suspend process if required */ - if (Flags) DbgkpSuspendProcess(); + if (SuspendProcess) Suspended = DbgkpSuspendProcess(); /* Set return status */ ApiMsg->ReturnedStatus = STATUS_PENDING; @@ -265,7 +267,7 @@ DbgkpSendApiMessage(IN OUT PDBGKM_MSG ApiMsg, ZwFlushInstructionCache(NtCurrentProcess(), NULL, 0); /* Resume the process if it was suspended */ - if (Flags) DbgkpResumeProcess(); + if (Suspended) DbgkpResumeProcess(); return Status; } @@ -426,7 +428,7 @@ DbgkpWakeTarget(IN PDEBUG_EVENT DebugEvent) DBGKTRACE(DBGK_OBJECT_DEBUG, "DebugEvent: %p\n", DebugEvent); /* Check if we have to wake the thread */ - if (DebugEvent->Flags & 20) PsResumeThread(Thread, NULL); + if (DebugEvent->Flags & 0x20) PsResumeThread(Thread, NULL); /* Check if we had locked the thread */ if (DebugEvent->Flags & 8) diff --git a/reactos/ntoskrnl/include/internal/dbgk.h b/reactos/ntoskrnl/include/internal/dbgk.h index ffb9a7ad090..975272916cb 100644 --- a/reactos/ntoskrnl/include/internal/dbgk.h +++ b/reactos/ntoskrnl/include/internal/dbgk.h @@ -102,7 +102,7 @@ NTSTATUS NTAPI DbgkpSendApiMessage( IN OUT PDBGKM_MSG ApiMsg, - IN ULONG Flags + IN BOOLEAN SuspendProcess ); HANDLE