use tags for pool allocations, and reformat code
Modified: trunk/reactos/ntoskrnl/ps/job.c

Modified: trunk/reactos/ntoskrnl/ps/job.c
--- trunk/reactos/ntoskrnl/ps/job.c	2005-04-08 13:02:23 UTC (rev 14546)
+++ trunk/reactos/ntoskrnl/ps/job.c	2005-04-08 13:14:15 UTC (rev 14547)
@@ -1,10 +1,10 @@
 /* $Id$
- * 
+ *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS kernel
  * FILE:            ntoskrnl/ps/job.c
  * PURPOSE:         Job Native Functions
- * 
+ *
  * PROGRAMMERS:     Alex Ionescu (alex@relsoft.net) (stubs)
  *                  Thomas Weidenmueller <w3seek@reactos.com>
  */
@@ -17,281 +17,293 @@
 
 /* GLOBALS *******************************************************************/
 
+#define TAG_EJOB TAG('E', 'J', 'O', 'B') /* EJOB */
+
 POBJECT_TYPE EXPORTED PsJobType = NULL;
 
 LIST_ENTRY PsJobListHead;
 static FAST_MUTEX PsJobListLock;
 
-static GENERIC_MAPPING PiJobMapping = {STANDARD_RIGHTS_READ | JOB_OBJECT_QUERY,
-                                       STANDARD_RIGHTS_WRITE | JOB_OBJECT_ASSIGN_PROCESS | JOB_OBJECT_SET_ATTRIBUTES | JOB_OBJECT_TERMINATE | JOB_OBJECT_SET_SECURITY_ATTRIBUTES,
-                                       STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE,
-                                       STANDARD_RIGHTS_ALL | JOB_OBJECT_ALL_ACCESS};
+static GENERIC_MAPPING PiJobMapping =
+{
+    STANDARD_RIGHTS_READ | JOB_OBJECT_QUERY,
+    STANDARD_RIGHTS_WRITE | JOB_OBJECT_ASSIGN_PROCESS | JOB_OBJECT_SET_ATTRIBUTES | JOB_OBJECT_TERMINATE | JOB_OBJECT_SET_SECURITY_ATTRIBUTES,
+    STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE,
+    STANDARD_RIGHTS_ALL | JOB_OBJECT_ALL_ACCESS
+};
 
 /* FUNCTIONS *****************************************************************/
 
 VOID STDCALL
-PiDeleteJob(PVOID ObjectBody)
+PiDeleteJob ( PVOID ObjectBody )
 {
-  PEJOB Job = (PEJOB)ObjectBody;
-  
-  /* remove the reference to the completion port if associated */
-  if(Job->CompletionPort != NULL)
-  {
-    ObDereferenceObject(Job->CompletionPort);
-  }
+    PEJOB Job = (PEJOB)ObjectBody;
 
-  /* unlink the job object */
-  if(Job->JobLinks.Flink != NULL)
-  {
-    ExAcquireFastMutex(&PsJobListLock);
-    RemoveEntryList(&Job->JobLinks);
-    ExReleaseFastMutex(&PsJobListLock);
-  }
-  
-  ExDeleteResource(&Job->JobLock);
+    /* remove the reference to the completion port if associated */
+    if(Job->CompletionPort != NULL)
+    {
+        ObDereferenceObject(Job->CompletionPort);
+    }
+
+    /* unlink the job object */
+    if(Job->JobLinks.Flink != NULL)
+    {
+        ExAcquireFastMutex(&PsJobListLock);
+        RemoveEntryList(&Job->JobLinks);
+        ExReleaseFastMutex(&PsJobListLock);
+    }
+
+    ExDeleteResource(&Job->JobLock);
 }
 
 VOID INIT_FUNCTION
-PsInitJobManagment(VOID)
+PsInitJobManagment ( VOID )
 {
-  PsJobType = ExAllocatePool(NonPagedPool, sizeof(OBJECT_TYPE));
+    PsJobType = ExAllocatePoolWithTag (
+        NonPagedPool, sizeof(OBJECT_TYPE), TAG_EJOB );
 
-  PsJobType->Tag = TAG('E', 'J', 'O', 'B');
-  PsJobType->TotalObjects = 0;
-  PsJobType->TotalHandles = 0;
-  PsJobType->PeakObjects = 0;
-  PsJobType->PeakHandles = 0;
-  PsJobType->PagedPoolCharge = 0;
-  PsJobType->NonpagedPoolCharge = sizeof(EJOB);
-  PsJobType->Mapping = &PiJobMapping;
-  PsJobType->Dump = NULL;
-  PsJobType->Open = NULL;
-  PsJobType->Close = NULL;
-  PsJobType->Delete = PiDeleteJob;
-  PsJobType->Parse = NULL;
-  PsJobType->Security = NULL;
-  PsJobType->QueryName = NULL;
-  PsJobType->OkayToClose = NULL;
-  PsJobType->Create = NULL;
-  PsJobType->DuplicationNotify = NULL;
-  
-  RtlInitUnicodeString(&PsJobType->TypeName, L"Job");
-  
-  ObpCreateTypeObject(PsJobType);
-  
-  InitializeListHead(&PsJobListHead);
-  ExInitializeFastMutex(&PsJobListLock);
+    PsJobType->Tag = TAG_EJOB;
+    PsJobType->TotalObjects = 0;
+    PsJobType->TotalHandles = 0;
+    PsJobType->PeakObjects = 0;
+    PsJobType->PeakHandles = 0;
+    PsJobType->PagedPoolCharge = 0;
+    PsJobType->NonpagedPoolCharge = sizeof(EJOB);
+    PsJobType->Mapping = &PiJobMapping;
+    PsJobType->Dump = NULL;
+    PsJobType->Open = NULL;
+    PsJobType->Close = NULL;
+    PsJobType->Delete = PiDeleteJob;
+    PsJobType->Parse = NULL;
+    PsJobType->Security = NULL;
+    PsJobType->QueryName = NULL;
+    PsJobType->OkayToClose = NULL;
+    PsJobType->Create = NULL;
+    PsJobType->DuplicationNotify = NULL;
+
+    RtlInitUnicodeString(&PsJobType->TypeName, L"Job");
+
+    ObpCreateTypeObject(PsJobType);
+
+    InitializeListHead(&PsJobListHead);
+    ExInitializeFastMutex(&PsJobListLock);
 }
 
 NTSTATUS
-PspAssignProcessToJob(PEPROCESS Process,
-                      PEJOB Job)
+PspAssignProcessToJob (
+    PEPROCESS Process,
+    PEJOB Job)
 {
-  DPRINT("PspAssignProcessToJob() is unimplemented!\n");
-  return STATUS_NOT_IMPLEMENTED;
+    DPRINT("PspAssignProcessToJob() is unimplemented!\n");
+    return STATUS_NOT_IMPLEMENTED;
 }
 
 NTSTATUS
-PspTerminateJobObject(PEJOB Job,
-                      KPROCESSOR_MODE AccessMode,
-                      NTSTATUS ExitStatus)
+PspTerminateJobObject (
+    PEJOB Job,
+    KPROCESSOR_MODE AccessMode,
+    NTSTATUS ExitStatus )
 {
-  DPRINT("PspTerminateJobObject() is unimplemented!\n");
-  return STATUS_NOT_IMPLEMENTED;
+    DPRINT("PspTerminateJobObject() is unimplemented!\n");
+    return STATUS_NOT_IMPLEMENTED;
 }
 
 
 /*
  * @unimplemented
  */
-NTSTATUS 
-STDCALL 
-NtAssignProcessToJobObject(HANDLE JobHandle,
-                           HANDLE ProcessHandle)
+NTSTATUS
+STDCALL
+NtAssignProcessToJobObject (
+    HANDLE JobHandle,
+    HANDLE ProcessHandle)
 {
-  PEPROCESS Process;
-  KPROCESSOR_MODE PreviousMode;
-  NTSTATUS Status;
-  
-  PAGED_CODE();
-  
-  PreviousMode = ExGetPreviousMode();
-  
-  /* make sure we're having a handle with enough rights, especially the to
-     terminate the process. otherwise one could abuse the job objects to
-     terminate processes without having rights granted to do so! The reason
-     I open the process handle before the job handle is that a simple test showed
-     that it first complains about a invalid process handle! The other way around
-     would be simpler though... */
-  Status = ObReferenceObjectByHandle(ProcessHandle,
-                                     PROCESS_TERMINATE,
-                                     PsProcessType,
-                                     PreviousMode,
-                                     (PVOID*)&Process,
-                                     NULL);
-  if(NT_SUCCESS(Status))
-  {
-    if(Process->Job == NULL)
+    PEPROCESS Process;
+    KPROCESSOR_MODE PreviousMode;
+    NTSTATUS Status;
+
+    PAGED_CODE();
+
+    PreviousMode = ExGetPreviousMode();
+
+    /* make sure we're having a handle with enough rights, especially the to
+    terminate the process. otherwise one could abuse the job objects to
+    terminate processes without having rights granted to do so! The reason
+    I open the process handle before the job handle is that a simple test showed
+    that it first complains about a invalid process handle! The other way around
+    would be simpler though... */
+    Status = ObReferenceObjectByHandle(
+        ProcessHandle,
+        PROCESS_TERMINATE,
+        PsProcessType,
+        PreviousMode,
+        (PVOID*)&Process,
+        NULL);
+    if(NT_SUCCESS(Status))
     {
-      PEJOB Job;
-      
-      Status = ObReferenceObjectByHandle(JobHandle,
-                                         JOB_OBJECT_ASSIGN_PROCESS,
-                                         PsJobType,
-                                         PreviousMode,
-                                         (PVOID*)&Job,
-                                         NULL);
-      if(NT_SUCCESS(Status))
-      {
-        /* lock the process so we can safely assign the process. Note that in the
-           meanwhile another thread could have assigned this process to a job! */
+        if(Process->Job == NULL)
+        {
+            PEJOB Job;
 
-        Status = PsLockProcess(Process, FALSE);
-        if(NT_SUCCESS(Status))
+            Status = ObReferenceObjectByHandle(
+                JobHandle,
+                JOB_OBJECT_ASSIGN_PROCESS,
+                PsJobType,
+                PreviousMode,
+                (PVOID*)&Job,
+                NULL);
+            if(NT_SUCCESS(Status))
+            {
+                /* lock the process so we can safely assign the process. Note that in the
+                meanwhile another thread could have assigned this process to a job! */
+
+                Status = PsLockProcess(Process, FALSE);
+                if(NT_SUCCESS(Status))
+                {
+                    if(Process->Job == NULL && Process->SessionId == Job->SessionId)
+                    {
+                        /* Just store the pointer to the job object in the process, we'll
+                        assign it later. The reason we can't do this here is that locking
+                        the job object might require it to wait, which is a bad thing
+                        while holding the process lock! */
+                        Process->Job = Job;
+                    }
+                    else
+                    {
+                        /* process is already assigned to a job or session id differs! */
+                        Status = STATUS_ACCESS_DENIED;
+                    }
+                    PsUnlockProcess(Process);
+
+                    if(NT_SUCCESS(Status))
+                    {
+                        /* let's actually assign the process to the job as we're not holding
+                        the process lock anymore! */
+                        Status = PspAssignProcessToJob(Process, Job);
+                    }
+                }
+
+                ObDereferenceObject(Job);
+            }
+        }
+        else
         {
-          if(Process->Job == NULL && Process->SessionId == Job->SessionId)
-          {
-            /* Just store the pointer to the job object in the process, we'll
-               assign it later. The reason we can't do this here is that locking
-               the job object might require it to wait, which is a bad thing
-               while holding the process lock! */
-            Process->Job = Job;
-          }
-          else
-          {
             /* process is already assigned to a job or session id differs! */
             Status = STATUS_ACCESS_DENIED;
-          }
-          PsUnlockProcess(Process);
-          
-          if(NT_SUCCESS(Status))
-          {
-            /* let's actually assign the process to the job as we're not holding
-               the process lock anymore! */
-            Status = PspAssignProcessToJob(Process, Job);
-          }
         }
 
-        ObDereferenceObject(Job);
-      }
+        ObDereferenceObject(Process);
     }
-    else
-    {
-      /* process is already assigned to a job or session id differs! */
-      Status = STATUS_ACCESS_DENIED;
-    }
-    
-    ObDereferenceObject(Process);
-  }
 
-  return Status;
+    return Status;
 }
 
 
 /*
  * @unimplemented
  */
-NTSTATUS 
-STDCALL 
-NtCreateJobObject(PHANDLE JobHandle,
-                  ACCESS_MASK DesiredAccess,
-                  POBJECT_ATTRIBUTES ObjectAttributes)
+NTSTATUS
+STDCALL
+NtCreateJobObject (
+    PHANDLE JobHandle,
+    ACCESS_MASK DesiredAccess,
+    POBJECT_ATTRIBUTES ObjectAttributes )
 {
-  HANDLE hJob;
-  PEJOB Job;
-  KPROCESSOR_MODE PreviousMode;
-  PEPROCESS CurrentProcess;
-  NTSTATUS Status = STATUS_SUCCESS;
-  
-  PAGED_CODE();
+    HANDLE hJob;
+    PEJOB Job;
+    KPROCESSOR_MODE PreviousMode;
+    PEPROCESS CurrentProcess;
+    NTSTATUS Status = STATUS_SUCCESS;
 
-  PreviousMode = ExGetPreviousMode();
-  CurrentProcess = PsGetCurrentProcess();
+    PAGED_CODE();
 
-  /* check for valid buffers */
-  if(PreviousMode == UserMode)
-  {
-    _SEH_TRY
+    PreviousMode = ExGetPreviousMode();
+    CurrentProcess = PsGetCurrentProcess();
+
+    /* check for valid buffers */
+    if(PreviousMode == UserMode)
     {
-      /* probe with 32bit alignment */
-      ProbeForWrite(JobHandle,
-                    sizeof(HANDLE),
-                    sizeof(ULONG));
+        _SEH_TRY
+        {
+            /* probe with 32bit alignment */
+            ProbeForWrite(JobHandle,
+                sizeof(HANDLE),
+                sizeof(ULONG));
+        }
+        _SEH_HANDLE
+        {
+            Status = _SEH_GetExceptionCode();
+        }
+        _SEH_END;
+
+        if(!NT_SUCCESS(Status))
+        {
+            return Status;
+        }
     }
-    _SEH_HANDLE
-    {
-      Status = _SEH_GetExceptionCode();
-    }
-    _SEH_END;
 
-    if(!NT_SUCCESS(Status))
-    {
-      return Status;
-    }
-  }
-  
-  Status = ObCreateObject(PreviousMode,
-                          PsJobType,
-                          ObjectAttributes,
-                          PreviousMode,
-                          NULL,
-                          sizeof(EJOB),
-                          0,
-                          0,
-                          (PVOID*)&Job);
-  
-  if(NT_SUCCESS(Status))
-  {
-    /* FIXME - Zero all fields as we don't yet implement all of them */
-    RtlZeroMemory(Job, sizeof(EJOB));
-    
-    /* make sure that early destruction doesn't attempt to remove the object from
-       the list before it even gets added! */
-    Job->JobLinks.Flink = NULL;
-    
-    /* setup the job object */
-    InitializeListHead(&Job->ProcessListHead);
-    Job->SessionId = CurrentProcess->SessionId; /* inherit the session id from the caller */
-    
-    Status = ExInitializeResource(&Job->JobLock);
-    if(!NT_SUCCESS(Status))
-    {
-      DPRINT1("Failed to initialize job lock!!!\n");
-      ObDereferenceObject(Job);
-      return Status;
-    }
-    KeInitializeEvent(&Job->Event, NotificationEvent, FALSE);
-    
-    /* link the object into the global job list */
-    ExAcquireFastMutex(&PsJobListLock);
-    InsertTailList(&PsJobListHead, &Job->JobLinks);
-    ExReleaseFastMutex(&PsJobListLock);
-    
-    Status = ObInsertObject(Job,
-                            NULL,
-                            DesiredAccess,
-                            0,
-                            NULL,
-                            &hJob);
+    Status = ObCreateObject(PreviousMode,
+        PsJobType,
+        ObjectAttributes,
+        PreviousMode,
+        NULL,
+        sizeof(EJOB),
+        0,
+        0,
+        (PVOID*)&Job);
+
     if(NT_SUCCESS(Status))
     {
-      /* pass the handle back to the caller */
-      _SEH_TRY
-      {
-        /* NOTE: if the caller passed invalid buffers to receive the handle it's his
-                 own fault! the object will still be created and live... It's possible
-                 to find the handle using ObFindHandleForObject()! */
-        *JobHandle = hJob;
-      }
-      _SEH_HANDLE
-      {
-        Status = _SEH_GetExceptionCode();
-      }
-      _SEH_END;
+        /* FIXME - Zero all fields as we don't yet implement all of them */
+        RtlZeroMemory(Job, sizeof(EJOB));
+
+        /* make sure that early destruction doesn't attempt to remove the object from
+        the list before it even gets added! */
+        Job->JobLinks.Flink = NULL;
+
+        /* setup the job object */
+        InitializeListHead(&Job->ProcessListHead);
+        Job->SessionId = CurrentProcess->SessionId; /* inherit the session id from the caller */
+
+        Status = ExInitializeResource(&Job->JobLock);
+        if(!NT_SUCCESS(Status))
+        {
+            DPRINT1("Failed to initialize job lock!!!\n");
+            ObDereferenceObject(Job);
+            return Status;
+        }
+        KeInitializeEvent(&Job->Event, NotificationEvent, FALSE);
+
+        /* link the object into the global job list */
+        ExAcquireFastMutex(&PsJobListLock);
+        InsertTailList(&PsJobListHead, &Job->JobLinks);
+        ExReleaseFastMutex(&PsJobListLock);
+
+        Status = ObInsertObject(Job,
+            NULL,
+            DesiredAccess,
+            0,
+            NULL,
+            &hJob);
+        if(NT_SUCCESS(Status))
+        {
+            /* pass the handle back to the caller */
+            _SEH_TRY
+            {
+                /* NOTE: if the caller passed invalid buffers to receive the handle it's his
+                own fault! the object will still be created and live... It's possible
+                to find the handle using ObFindHandleForObject()! */
+                *JobHandle = hJob;
+            }
+            _SEH_HANDLE
+            {
+                Status = _SEH_GetExceptionCode();
+            }
+            _SEH_END;
+        }
     }
-  }
-  
-  return Status;
+
+    return Status;
 }
 
 
@@ -300,195 +312,203 @@
  */
 NTSTATUS
 STDCALL
-NtIsProcessInJob(IN HANDLE ProcessHandle,
-                 IN HANDLE JobHandle OPTIONAL)
+NtIsProcessInJob (
+    IN HANDLE ProcessHandle,
+    IN HANDLE JobHandle OPTIONAL )
 {
-  KPROCESSOR_MODE PreviousMode;
-  PEPROCESS Process;
-  NTSTATUS Status;
-  
-  PreviousMode = ExGetPreviousMode();
-  
-  PAGED_CODE();
-  
-  Status = ObReferenceObjectByHandle(ProcessHandle,
-                                     PROCESS_QUERY_INFORMATION,
-                                     PsProcessType,
-                                     PreviousMode,
-                                     (PVOID*)&Process,
-                                     NULL);
-  if(NT_SUCCESS(Status))
-  {
-    /* FIXME - make sure the job object doesn't get exchanged or deleted while trying to
-               reference it, e.g. by locking it somehow until it is referenced... */
+    KPROCESSOR_MODE PreviousMode;
+    PEPROCESS Process;
+    NTSTATUS Status;
 
-    PEJOB ProcessJob = Process->Job;
-    
-    if(ProcessJob != NULL)
+    PreviousMode = ExGetPreviousMode();
+
+    PAGED_CODE();
+
+    Status = ObReferenceObjectByHandle(
+        ProcessHandle,
+        PROCESS_QUERY_INFORMATION,
+        PsProcessType,
+        PreviousMode,
+        (PVOID*)&Process,
+        NULL);
+    if(NT_SUCCESS(Status))
     {
-      if(JobHandle == NULL)
-      {
-        /* the process is assigned to a job */
-        Status = STATUS_PROCESS_IN_JOB;
-      }
-      else /* JobHandle != NULL */
-      {
-        PEJOB JobObject;
+        /* FIXME - make sure the job object doesn't get exchanged or deleted while trying to
+        reference it, e.g. by locking it somehow until it is referenced... */
 
-        /* get the job object and compare the object pointer with the one assigned to the process */
-        Status = ObReferenceObjectByHandle(JobHandle,
-                                           JOB_OBJECT_QUERY,
-                                           PsJobType,
-                                           PreviousMode,
-                                           (PVOID*)&JobObject,
-                                           NULL);
-        if(NT_SUCCESS(Status))
+        PEJOB ProcessJob = Process->Job;
+
+        if(ProcessJob != NULL)
         {
-          Status = ((ProcessJob == JobObject) ? STATUS_PROCESS_IN_JOB : STATUS_PROCESS_NOT_IN_JOB);
-          ObDereferenceObject(JobObject);
+            if(JobHandle == NULL)
+            {
+                /* the process is assigned to a job */
+                Status = STATUS_PROCESS_IN_JOB;
+            }
+            else /* JobHandle != NULL */
+            {
+                PEJOB JobObject;
+
+                /* get the job object and compare the object pointer with the one assigned to the process */
+                Status = ObReferenceObjectByHandle(JobHandle,
+                    JOB_OBJECT_QUERY,
+                    PsJobType,
+                    PreviousMode,
+                    (PVOID*)&JobObject,
+                    NULL);
+                if(NT_SUCCESS(Status))
+                {
+                    Status = ((ProcessJob == JobObject) ? STATUS_PROCESS_IN_JOB : STATUS_PROCESS_NOT_IN_JOB);
+                    ObDereferenceObject(JobObject);
+                }
+            }
         }
-      }
+        else
+        {
+            /* the process is not assigned to any job */
+            Status = STATUS_PROCESS_NOT_IN_JOB;
+        }
+        ObDereferenceObject(Process);
     }
-    else
-    {
-      /* the process is not assigned to any job */
-      Status = STATUS_PROCESS_NOT_IN_JOB;
-    }
-    ObDereferenceObject(Process);
-  }
 
-  return Status;
+    return Status;
 }
 
 
 /*
  * @implemented
  */
-NTSTATUS 
-STDCALL 
-NtOpenJobObject(PHANDLE JobHandle,
-                ACCESS_MASK DesiredAccess,
-                POBJECT_ATTRIBUTES ObjectAttributes)
+NTSTATUS
+STDCALL
+NtOpenJobObject (
+    PHANDLE JobHandle,
+    ACCESS_MASK DesiredAccess,
+    POBJECT_ATTRIBUTES ObjectAttributes)
 {
-  KPROCESSOR_MODE PreviousMode;
-  HANDLE hJob;
-  NTSTATUS Status = STATUS_SUCCESS;
-  
-  PAGED_CODE();
+    KPROCESSOR_MODE PreviousMode;
+    HANDLE hJob;
+    NTSTATUS Status = STATUS_SUCCESS;
 
-  PreviousMode = ExGetPreviousMode();
+    PAGED_CODE();
 
-  /* check for valid buffers */
-  if(PreviousMode == UserMode)
-  {
-    _SEH_TRY
+    PreviousMode = ExGetPreviousMode();
+
+    /* check for valid buffers */
+    if(PreviousMode == UserMode)
     {
-      /* probe with 32bit alignment */
-      ProbeForWrite(JobHandle,
-                    sizeof(HANDLE),
-                    sizeof(ULONG));
+        _SEH_TRY
+        {
+            /* probe with 32bit alignment */
+            ProbeForWrite(JobHandle,
+                sizeof(HANDLE),
+                sizeof(ULONG));
+        }
+        _SEH_HANDLE
+        {
+            Status = _SEH_GetExceptionCode();
+        }
+        _SEH_END;
+
+        if(!NT_SUCCESS(Status))
+        {
+            return Status;
+        }
     }
-    _SEH_HANDLE
-    {
-      Status = _SEH_GetExceptionCode();
-    }
-    _SEH_END;
-    
-    if(!NT_SUCCESS(Status))
-    {
-      return Status;
-    }
-  }
-  
-  if(NT_SUCCESS(Status))
-  {
-    Status = ObOpenObjectByName(ObjectAttributes,
-                                PsJobType,
-                                NULL,
-                                PreviousMode,
-                                DesiredAccess,
-                                NULL,
-                                &hJob);
+
     if(NT_SUCCESS(Status))
     {
-      _SEH_TRY
-      {
-        *JobHandle = hJob;
-      }
-      _SEH_HANDLE
-      {
-        Status = _SEH_GetExceptionCode();
-      }
-      _SEH_END;
+        Status = ObOpenObjectByName(ObjectAttributes,
+            PsJobType,
+            NULL,
+            PreviousMode,
+            DesiredAccess,
+            NULL,
+            &hJob);
+        if(NT_SUCCESS(Status))
+        {
+            _SEH_TRY
+            {
+                *JobHandle = hJob;
+            }
+            _SEH_HANDLE
+            {
+                Status = _SEH_GetExceptionCode();
+            }
+            _SEH_END;
+        }
     }
-  }
-  
-  return Status;
+
+    return Status;
 }
 
 
 /*
  * @unimplemented
  */
-NTSTATUS 
-STDCALL 
-NtQueryInformationJobObject(HANDLE JobHandle,
-                            JOBOBJECTINFOCLASS JobInformationClass,
-                            PVOID JobInformation,
-                            ULONG JobInformationLength,
-                            PULONG ReturnLength)
+NTSTATUS
+STDCALL
+NtQueryInformationJobObject (
+    HANDLE JobHandle,
+    JOBOBJECTINFOCLASS JobInformationClass,
+    PVOID JobInformation,
+    ULONG JobInformationLength,
+    PULONG ReturnLength )
 {
-  UNIMPLEMENTED;
-  return STATUS_NOT_IMPLEMENTED;
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
 }
 
 
 /*
  * @unimplemented
  */
-NTSTATUS 
-STDCALL 
-NtSetInformationJobObject(HANDLE JobHandle,
-                          JOBOBJECTINFOCLASS JobInformationClass,
-                          PVOID JobInformation,
-                          ULONG JobInformationLength)
+NTSTATUS
+STDCALL
+NtSetInformationJobObject (
+    HANDLE JobHandle,
+    JOBOBJECTINFOCLASS JobInformationClass,
+    PVOID JobInformation,
+    ULONG JobInformationLength)
 {
-  UNIMPLEMENTED;
-  return STATUS_NOT_IMPLEMENTED;
+    UNIMPLEMENTED;
+    return STATUS_NOT_IMPLEMENTED;
 }
 
 
 /*
  * @unimplemented
  */
-NTSTATUS 
-STDCALL 
-NtTerminateJobObject(HANDLE JobHandle,
-                     NTSTATUS ExitStatus)
+NTSTATUS
+STDCALL
+NtTerminateJobObject (
+    HANDLE JobHandle,
+    NTSTATUS ExitStatus )
 {
-  KPROCESSOR_MODE PreviousMode;
-  PEJOB Job;
-  NTSTATUS Status;
-  
-  PAGED_CODE();
-  
-  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;
+    KPROCESSOR_MODE PreviousMode;
+    PEJOB Job;
+    NTSTATUS Status;
+
+    PAGED_CODE();
+
+    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;
 }
 
 
@@ -496,11 +516,11 @@
  * @implemented
  */
 PVOID
-STDCALL 
-PsGetJobLock(PEJOB Job)
+STDCALL
+PsGetJobLock ( PEJOB Job )
 {
-  ASSERT(Job);
-  return (PVOID)&Job->JobLock;
+    ASSERT(Job);
+    return (PVOID)&Job->JobLock;
 }
 
 
@@ -509,10 +529,10 @@
  */
 PVOID
 STDCALL
-PsGetJobSessionId(PEJOB Job)
+PsGetJobSessionId ( PEJOB Job )
 {
-  ASSERT(Job);
-  return (PVOID)Job->SessionId;
+    ASSERT(Job);
+    return (PVOID)Job->SessionId;
 }
 
 
@@ -521,10 +541,10 @@
  */
 ULONG
 STDCALL
-PsGetJobUIRestrictionsClass(PEJOB Job)
+PsGetJobUIRestrictionsClass ( PEJOB Job )
 {
-  ASSERT(Job);
-  return Job->UIRestrictionsClass;
+    ASSERT(Job);
+    return Job->UIRestrictionsClass;
 }
 
 
@@ -533,12 +553,13 @@
  */
 VOID
 STDCALL
-PsSetJobUIRestrictionsClass(PEJOB Job,
-                            ULONG UIRestrictionsClass)
+PsSetJobUIRestrictionsClass (
+    PEJOB Job,
+    ULONG UIRestrictionsClass)
 {
-  ASSERT(Job);
-  InterlockedExchangeUL(&Job->UIRestrictionsClass, UIRestrictionsClass);
-  /* FIXME - walk through the job process list and update the restrictions? */
+    ASSERT(Job);
+    InterlockedExchangeUL(&Job->UIRestrictionsClass, UIRestrictionsClass);
+    /* FIXME - walk through the job process list and update the restrictions? */
 }
 
 /* EOF */