ObjectHeader->PointerCount);
/* Check if the types match */
- if ((Type) && (ObjectType != Type))
- {
- /* They don't; fail */
- DPRINT1("Type mismatch: %wZ, %wZ\n", &ObjectType->Name, &Type->Name);
- return STATUS_OBJECT_TYPE_MISMATCH;
- }
+ if ((Type) && (ObjectType != Type)) return STATUS_OBJECT_TYPE_MISMATCH;
/* Check if this is a kernel handle */
if ((HandleAttributes & OBJ_KERNEL_HANDLE) && (AccessMode == KernelMode))
PVOID NextObject;
/* Start reaping */
- while((ReapObject = InterlockedExchangePointer(&ObpReaperList, NULL)))
+ while ((ReapObject = InterlockedExchangePointer(&ObpReaperList, NULL)))
{
/* Start deletion loop */
do
/* Move to the next one */
ReapObject = NextObject;
- } while(NextObject != NULL);
+ } while (NextObject);
}
}
(StringLength == (MAXUSHORT - sizeof(UNICODE_NULL) + 1)))
{
/* PS: Please keep the checks above expanded for clarity */
- DPRINT1("Invalid String Length\n");
Status = STATUS_OBJECT_NAME_INVALID;
}
else
else
{
/* Fail */
- DPRINT1("Out of Memory!\n");
Status = STATUS_INSUFFICIENT_RESOURCES;
}
}
}
/* Initialize the Object Name Info */
- if (HasNameInfo)
+ if (HasNameInfo)
{
NameInfo = (POBJECT_HEADER_NAME_INFO)Header;
NameInfo->Name = *ObjectName;
sizeof(OBJECT_TYPE) + sizeof(OBJECT_HEADER),
KernelMode,
(POBJECT_HEADER*)&Header);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status))
+ {
+ /* Free the name and fail */
+ ExFreePool(ObjectName.Buffer);
+ return Status;
+ }
+
+ /* Setup the flags and name */
LocalObjectType = (POBJECT_TYPE)&Header->Body;
+ LocalObjectType->Name = ObjectName;
+ Header->Flags |= OB_FLAG_KERNEL_MODE | OB_FLAG_PERMANENT;
/* Check if this is the first Object Type */
if (!ObTypeObjectType)
LocalObjectType->Key = *(PULONG)Tag;
}
- /* Set it up */
+ /* Set up the type information */
LocalObjectType->TypeInfo = *ObjectTypeInitializer;
- LocalObjectType->Name = *TypeName;
LocalObjectType->TypeInfo.PoolType = ObjectTypeInitializer->PoolType;
- /* These two flags need to be manually set up */
- Header->Flags |= OB_FLAG_KERNEL_MODE | OB_FLAG_PERMANENT;
-
/* Check if we have to maintain a type list */
if (NtGlobalFlag & FLG_MAINTAIN_OBJECT_TYPELIST)
{
}
/* Get a pointer to it */
- if (!(HandleEntry = ExMapHandleToPointer(HandleTable, Handles[i])))
+ HandleEntry = ExMapHandleToPointer(HandleTable, Handles[i]);
+ if (!HandleEntry)
{
- DPRINT1("Invalid handle\n");
+ /* Fail, handle is invalid */
Status = STATUS_INVALID_HANDLE;
goto Quickie;
}