Author: tfaber
Date: Sun Feb  3 20:15:54 2013
New Revision: 58281
URL: 
http://svn.reactos.org/svn/reactos?rev=58281&view=rev
Log:
[NTOSKRNL:OB]
- Actually fail when the maximum number of reparse attempts is reached in
ObpLookupObjectName. It previously returned a pointer to whatever object was currently in
charge of parsing, but without taking a reference to it.
- Fixes 'Header->HandleCount == 0' assertion failure (on \REGISTRY object)
after running ntdll_winetest:reg three times (and also fixes the remaining test failure)
Modified:
    trunk/reactos/ntoskrnl/ob/obname.c
Modified: trunk/reactos/ntoskrnl/ob/obname.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ob/obname.c?rev=5…
==============================================================================
--- trunk/reactos/ntoskrnl/ob/obname.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ob/obname.c [iso-8859-1] Sun Feb  3 20:15:54 2013
@@ -437,7 +437,7 @@
         }
         else if (!(ObjectName->Length) || !(ObjectName->Buffer))
         {
-            /* Just return the Root Directory if we didn't get a name*/
+            /* Just return the Root Directory if we didn't get a name */
             Status = ObReferenceObjectByPointer(RootDirectory,
                                                 0,
                                                 ObjectType,
@@ -719,7 +719,7 @@
                 if (ObjectNameInfo->Name.Buffer)
                 {
                     /* Free it */
-                    ExFreePoolWithTag(ObjectNameInfo->Name.Buffer, OB_NAME_TAG );
+                    ExFreePoolWithTag(ObjectNameInfo->Name.Buffer, OB_NAME_TAG);
                 }
                 /* Write new one */
@@ -796,6 +796,11 @@
                     /* Reparse again */
                     Reparse = TRUE;
                     --MaxReparse;
+                    if (MaxReparse == 0)
+                    {
+                        Object = NULL;
+                        break;
+                    }
                     /* Start over from root if we got sent back there */
                     if ((Status == STATUS_REPARSE_OBJECT) ||