diff --git a/reactos/include/ndk/rtlfuncs.h b/reactos/include/ndk/rtlfuncs.h index 268049d35ee..3713530250b 100644 --- a/reactos/include/ndk/rtlfuncs.h +++ b/reactos/include/ndk/rtlfuncs.h @@ -2328,6 +2328,15 @@ RtlFindClearBitsAndSet( IN ULONG HintIndex ); +NTSYSAPI +ULONG +NTAPI +RtlFindNextForwardRunClear( + IN PRTL_BITMAP BitMapHeader, + IN ULONG FromIndex, + IN PULONG StartingRunIndex +); + NTSYSAPI VOID NTAPI @@ -2337,6 +2346,13 @@ RtlInitializeBitMap( IN ULONG SizeOfBitMap ); +NTSYSAPI +ULONG +NTAPI +RtlNumberOfSetBits( + IN PRTL_BITMAP BitMapHeader +); + NTSYSAPI VOID NTAPI diff --git a/reactos/ntoskrnl/ob/obdir.c b/reactos/ntoskrnl/ob/obdir.c index dac008026eb..6cc9b96d2e8 100644 --- a/reactos/ntoskrnl/ob/obdir.c +++ b/reactos/ntoskrnl/ob/obdir.c @@ -220,9 +220,6 @@ ObpLookupEntryDirectory(IN POBJECT_DIRECTORY Directory, /* Save the found object */ FoundObject = CurrentEntry->Object; if (!FoundObject) goto Quickie; - - /* Add a reference to the object */ - ObReferenceObject(FoundObject); } /* Check if the directory was unlocked (which means we locked it) */ diff --git a/reactos/ntoskrnl/ob/obhandle.c b/reactos/ntoskrnl/ob/obhandle.c index 9abbce0c3d3..ec1d2b0e44d 100644 --- a/reactos/ntoskrnl/ob/obhandle.c +++ b/reactos/ntoskrnl/ob/obhandle.c @@ -1382,7 +1382,6 @@ ObDuplicateObject(IN PEPROCESS SourceProcess, } /* Now create the handle */ - ObDereferenceObject(SourceObject); NewHandle = ExCreateHandle(HandleTable, &NewHandleEntry); if (!NewHandle) { diff --git a/reactos/ntoskrnl/ob/obname.c b/reactos/ntoskrnl/ob/obname.c index 59c3c93636e..a670238e1a6 100644 --- a/reactos/ntoskrnl/ob/obname.c +++ b/reactos/ntoskrnl/ob/obname.c @@ -102,6 +102,7 @@ ObpDeleteNameCheck(IN PVOID Object) /* Check if we were inserted in a directory */ if (Directory) { + /* We were, so dereference the directory and the object as well */ ObDereferenceObject(Directory); ObDereferenceObject(Object); } diff --git a/reactos/ntoskrnl/ob/obref.c b/reactos/ntoskrnl/ob/obref.c index fcdf068d65c..d955c10b061 100644 --- a/reactos/ntoskrnl/ob/obref.c +++ b/reactos/ntoskrnl/ob/obref.c @@ -88,7 +88,7 @@ ObfDereferenceObject(IN PVOID Object) /* Extract the object header */ Header = OBJECT_TO_OBJECT_HEADER(Object); - if (Header->PointerCount <= Header->HandleCount) + if (Header->PointerCount < Header->HandleCount) { DPRINT1("Misbehaving object: %wZ\n", &Header->Type->Name); return; @@ -98,7 +98,7 @@ ObfDereferenceObject(IN PVOID Object) if (!(InterlockedDecrement(&Header->PointerCount))) { /* Sanity check */ - if(Header->HandleCount) + if (Header->HandleCount) { DPRINT1("Misbehaving object: %wZ\n", &Header->Type->Name); return;