partial implementation of NtTerminateJobObject()
Modified: trunk/reactos/ntoskrnl/ps/job.c
_____
Modified: trunk/reactos/ntoskrnl/ps/job.c
--- trunk/reactos/ntoskrnl/ps/job.c 2005-01-21 14:40:06 UTC (rev
13185)
+++ trunk/reactos/ntoskrnl/ps/job.c 2005-01-21 14:52:53 UTC (rev
13186)
@@ -90,7 +90,16 @@
return STATUS_NOT_IMPLEMENTED;
}
+NTSTATUS
+PspTerminateJobObject(PEJOB Job,
+ KPROCESSOR_MODE AccessMode,
+ NTSTATUS ExitStatus)
+{
+ DPRINT("PspTerminateJobObject() is unimplemented!\n");
+ return STATUS_NOT_IMPLEMENTED;
+}
+
/*
* @unimplemented
*/
@@ -434,8 +443,27 @@
NtTerminateJobObject(HANDLE JobHandle,
NTSTATUS ExitStatus)
{
- UNIMPLEMENTED;
- return STATUS_NOT_IMPLEMENTED;
+ KPROCESSOR_MODE PreviousMode;
+ PEJOB Job;
+ NTSTATUS Status;
+
+ PreviousMode = ExGetPreviousMode();
+
+ Status = ObReferenceObjectByHandle(JobHandle,
+ JOB_OBJECT_TERMINATE,
+ PsJobType,
+ PreviousMode,
+ (PVOID*)&Job,
+ NULL);
+ if(NT_SUCCESS(Status))
+ {
+ Status = PspTerminateJobObject(Job,
+ PreviousMode,
+ ExitStatus);
+ ObDereferenceObject(Job);
+ }
+
+ return Status;
}