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=58... ============================================================================== --- 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) ||