- 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],
DEBUG_OBJECT_ALL_ACCESS,
&ObjectAttributes,
TRUE);
DBGK_KILL_PROCESS_ON_EXIT);
}
/*

View file

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

View file

@ -43,6 +43,12 @@ Author:
#define DEBUG_EVENT_PROTECT_FAILED (0x10)
#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
//

View file

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