- The 4th parameter of NtCreateDebugObject is not a BOOLEAN -- it is a ULONG, meaning it could contain several flags (but only 0x1 seems to be valid). Add DBGK_KILL_PROCESS_ON_EXIT as this flag and use it.

svn path=/trunk/; revision=41969
This commit is contained in:
Stefan Ginsberg 2009-07-15 14:01:15 +00:00
parent 9044027a2d
commit 1996b84fae
4 changed files with 13 additions and 4 deletions

View file

@ -33,7 +33,7 @@ DbgUiConnectToDbg(VOID)
return ZwCreateDebugObject(&NtCurrentTeb()->DbgSsReserved[1], return ZwCreateDebugObject(&NtCurrentTeb()->DbgSsReserved[1],
DEBUG_OBJECT_ALL_ACCESS, DEBUG_OBJECT_ALL_ACCESS,
&ObjectAttributes, &ObjectAttributes,
TRUE); DBGK_KILL_PROCESS_ON_EXIT);
} }
/* /*

View file

@ -43,7 +43,7 @@ NtCreateDebugObject(
OUT PHANDLE DebugHandle, OUT PHANDLE DebugHandle,
IN ACCESS_MASK DesiredAccess, IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes, IN POBJECT_ATTRIBUTES ObjectAttributes,
IN BOOLEAN KillProcessOnExit IN ULONG Flags
); );
NTSYSCALLAPI NTSYSCALLAPI

View file

@ -43,6 +43,12 @@ Author:
#define DEBUG_EVENT_PROTECT_FAILED (0x10) #define DEBUG_EVENT_PROTECT_FAILED (0x10)
#define DEBUG_EVENT_SUSPEND (0x20) #define DEBUG_EVENT_SUSPEND (0x20)
//
// NtCreateDebugObject Flags
//
#define DBGK_KILL_PROCESS_ON_EXIT (0x1)
#define DBGK_ALL_FLAGS (DBGK_KILL_PROCESS_ON_EXIT)
// //
// Debug Object Information Classes for NtQueryDebugObject // Debug Object Information Classes for NtQueryDebugObject
// //

View file

@ -1512,7 +1512,7 @@ NTAPI
NtCreateDebugObject(OUT PHANDLE DebugHandle, NtCreateDebugObject(OUT PHANDLE DebugHandle,
IN ACCESS_MASK DesiredAccess, IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes, IN POBJECT_ATTRIBUTES ObjectAttributes,
IN BOOLEAN KillProcessOnExit) IN ULONG Flags)
{ {
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode(); KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
PDEBUG_OBJECT DebugObject; PDEBUG_OBJECT DebugObject;
@ -1537,6 +1537,9 @@ NtCreateDebugObject(OUT PHANDLE DebugHandle,
if (!NT_SUCCESS(Status)) return Status; if (!NT_SUCCESS(Status)) return Status;
} }
/* Check for invalid flags */
if (Flags & ~DBGK_ALL_FLAGS) return STATUS_INVALID_PARAMETER;
/* Create the Object */ /* Create the Object */
Status = ObCreateObject(PreviousMode, Status = ObCreateObject(PreviousMode,
DbgkDebugObjectType, DbgkDebugObjectType,
@ -1561,7 +1564,7 @@ NtCreateDebugObject(OUT PHANDLE DebugHandle,
FALSE); FALSE);
/* Set the Flags */ /* Set the Flags */
DebugObject->KillProcessOnExit = KillProcessOnExit; DebugObject->Flags = Flags;
/* Insert it */ /* Insert it */
Status = ObInsertObject((PVOID)DebugObject, Status = ObInsertObject((PVOID)DebugObject,