Free the capture buffer in ObReferenceObjectByName.
Modified: trunk/reactos/ntoskrnl/ob/namespc.c

Modified: trunk/reactos/ntoskrnl/ob/namespc.c
--- trunk/reactos/ntoskrnl/ob/namespc.c	2005-05-21 12:08:46 UTC (rev 15451)
+++ trunk/reactos/ntoskrnl/ob/namespc.c	2005-05-21 12:11:54 UTC (rev 15452)
@@ -76,13 +76,13 @@
 			      NULL,
 			      NULL);
     
-    /* Capture all the info */
-    DPRINT("Capturing Create Info\n");
-    Status = ObpCaptureObjectAttributes(&ObjectAttributes,
-                                        AccessMode,
-                                        ObjectType,
-                                        &ObjectCreateInfo,
-                                        &ObjectName);
+   /* Capture all the info */
+   DPRINT("Capturing Create Info\n");
+   Status = ObpCaptureObjectAttributes(&ObjectAttributes,
+                                       AccessMode,
+                                       ObjectType,
+                                       &ObjectCreateInfo,
+                                       &ObjectName);
    if (!NT_SUCCESS(Status))
      {
 	DPRINT("ObpCaptureObjectAttributes() failed (Status %lx)\n", Status);
@@ -90,22 +90,23 @@
      }
      
    Status = ObFindObject(&ObjectCreateInfo,
-             &ObjectName,
+                         &ObjectName,
 			 &Object,
 			 &RemainingPath,
 			 ObjectType);
 
+   ObpReleaseCapturedAttributes(&ObjectCreateInfo);
+   if (ObjectName.Buffer) ExFreePool(ObjectName.Buffer);
+
    if (!NT_SUCCESS(Status))
      {
 	return(Status);
      }
-CHECKPOINT;
-DPRINT("RemainingPath.Buffer '%S' Object %p\n", RemainingPath.Buffer, Object);
+   DPRINT("RemainingPath.Buffer '%S' Object %p\n", RemainingPath.Buffer, Object);
 
    if (RemainingPath.Buffer != NULL || Object == NULL)
      {
-CHECKPOINT;
-DPRINT("Object %p\n", Object);
+        DPRINT("Object %p\n", Object);
 	*ObjectPtr = NULL;
 	RtlFreeUnicodeString (&RemainingPath);
 	return(STATUS_OBJECT_NAME_NOT_FOUND);
@@ -177,22 +178,22 @@
      }
                                         
    Status = ObFindObject(&ObjectCreateInfo,
-             &ObjectName,
+                         &ObjectName,
 			 &Object,
 			 &RemainingPath,
 			 ObjectType);
+   ObpReleaseCapturedAttributes(&ObjectCreateInfo);
+   if (ObjectName.Buffer) ExFreePool(ObjectName.Buffer);
    if (!NT_SUCCESS(Status))
      {
 	DPRINT("ObFindObject() failed (Status %lx)\n", Status);
 	return Status;
      }
 
-    DPRINT("OBject: %x, Remaining Path: %wZ\n", Object, &RemainingPath);
+   DPRINT("OBject: %x, Remaining Path: %wZ\n", Object, &RemainingPath);
    if (Object == NULL)
      {
        RtlFreeUnicodeString(&RemainingPath);
-       ObpReleaseCapturedAttributes(&ObjectCreateInfo);
-       if (ObjectName.Buffer) ExFreePool(ObjectName.Buffer);
        return STATUS_UNSUCCESSFUL;
      }
    if (RemainingPath.Buffer != NULL)
@@ -203,8 +204,6 @@
          Status =STATUS_OBJECT_PATH_NOT_FOUND;
       RtlFreeUnicodeString(&RemainingPath);
       ObDereferenceObject(Object);
-      ObpReleaseCapturedAttributes(&ObjectCreateInfo);
-      if (ObjectName.Buffer) ExFreePool(ObjectName.Buffer);
       return Status;
    }
    
@@ -216,8 +215,6 @@
 
    ObDereferenceObject(Object);
    RtlFreeUnicodeString(&RemainingPath);
-   ObpReleaseCapturedAttributes(&ObjectCreateInfo);
-   if (ObjectName.Buffer) ExFreePool(ObjectName.Buffer);
 
    return Status;
 }