[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)

svn path=/trunk/; revision=58281
This commit is contained in:
Thomas Faber 2013-02-03 20:15:54 +00:00
parent f65ef1e725
commit 358bfbd6c8

View file

@ -437,7 +437,7 @@ ObpLookupObjectName(IN HANDLE RootHandle OPTIONAL,
}
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 @@ ParseFromRoot:
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 @@ ReparseObject:
/* 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) ||