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