-/* $Id: namespc.c,v 1.41 2003/10/07 14:01:15 ekohl Exp $
+/* $Id$
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/ob/namespc.c
* PURPOSE: Manages the system namespace
- * PROGRAMMER: David Welch (welch@mcmail.com)
- * UPDATE HISTORY:
- * 22/05/98: Created
+ *
+ * PROGRAMMERS: David Welch (welch@mcmail.com)
*/
/* INCLUDES ***************************************************************/
-#include <limits.h>
-#define NTOS_MODE_KERNEL
-#include <ntos.h>
-#include <internal/ob.h>
-#include <internal/io.h>
-#include <internal/pool.h>
-
+#include <ntoskrnl.h>
#define NDEBUG
#include <internal/debug.h>
POBJECT_TYPE ObTypeObjectType = NULL;
PDIRECTORY_OBJECT NameSpaceRoot = NULL;
+ /* FIXME: Move this somewhere else once devicemap support is in */
+PDEVICE_MAP ObSystemDeviceMap = NULL;
static GENERIC_MAPPING ObpDirectoryMapping = {
STANDARD_RIGHTS_READ|DIRECTORY_QUERY|DIRECTORY_TRAVERSE,
UNICODE_STRING RemainingPath;
OBJECT_ATTRIBUTES ObjectAttributes;
NTSTATUS Status;
+
+ PAGED_CODE();
InitializeObjectAttributes(&ObjectAttributes,
ObjectPath,
- Attributes,
+ Attributes | OBJ_OPENIF,
NULL,
NULL);
Status = ObFindObject(&ObjectAttributes,
DPRINT("Object %p\n", Object);
*ObjectPtr = NULL;
RtlFreeUnicodeString (&RemainingPath);
- return(STATUS_UNSUCCESSFUL);
+ return(STATUS_OBJECT_NAME_NOT_FOUND);
}
*ObjectPtr = Object;
RtlFreeUnicodeString (&RemainingPath);
UNICODE_STRING RemainingPath;
PVOID Object = NULL;
NTSTATUS Status;
+
+ PAGED_CODE();
DPRINT("ObOpenObjectByName(...)\n");
return Status;
}
-
+VOID
+STDCALL
+ObQueryDeviceMapInformation(PEPROCESS Process,
+ PPROCESS_DEVICEMAP_INFORMATION DeviceMapInfo)
+{
+ //KIRQL OldIrql ;
+
+ /*
+ * FIXME: This is an ugly hack for now, to always return the System Device Map
+ * instead of returning the Process Device Map. Not important yet since we don't use it
+ */
+
+ /* FIXME: Acquire the DeviceMap Spinlock */
+ // KeAcquireSpinLock(DeviceMap->Lock, &OldIrql);
+
+ /* Make a copy */
+ DeviceMapInfo->Query.DriveMap = ObSystemDeviceMap->DriveMap;
+ RtlMoveMemory(DeviceMapInfo->Query.DriveType, ObSystemDeviceMap->DriveType, sizeof(ObSystemDeviceMap->DriveType));
+
+ /* FIXME: Release the DeviceMap Spinlock */
+ // KeReleasepinLock(DeviceMap->Lock, OldIrql);
+}
+
VOID
ObpAddEntryDirectory(PDIRECTORY_OBJECT Parent,
POBJECT_HEADER Header,
{
KIRQL oldlvl;
- RtlCreateUnicodeString(&Header->Name, Name);
+ RtlpCreateUnicodeString(&Header->Name, Name, NonPagedPool);
Header->Parent = Parent;
KeAcquireSpinLock(&Parent->Lock, &oldlvl);
}
-VOID
+VOID INIT_FUNCTION
ObInit(VOID)
/*
* FUNCTION: Initialize the object manager namespace
{
OBJECT_ATTRIBUTES ObjectAttributes;
UNICODE_STRING Name;
+ SECURITY_DESCRIPTOR SecurityDescriptor;
+
+ /* Initialize the security descriptor cache */
+ ObpInitSdCache();
/* create 'directory' object type */
ObDirectoryType = ExAllocatePool(NonPagedPool,sizeof(OBJECT_TYPE));
ObDirectoryType->Tag = TAG('D', 'I', 'R', 'T');
ObDirectoryType->TotalObjects = 0;
ObDirectoryType->TotalHandles = 0;
- ObDirectoryType->MaxObjects = ULONG_MAX;
- ObDirectoryType->MaxHandles = ULONG_MAX;
+ ObDirectoryType->PeakObjects = 0;
+ ObDirectoryType->PeakHandles = 0;
ObDirectoryType->PagedPoolCharge = 0;
ObDirectoryType->NonpagedPoolCharge = sizeof(DIRECTORY_OBJECT);
ObDirectoryType->Mapping = &ObpDirectoryMapping;
ObDirectoryType->OkayToClose = NULL;
ObDirectoryType->Create = ObpCreateDirectory;
ObDirectoryType->DuplicationNotify = NULL;
-
- RtlInitUnicodeStringFromLiteral(&ObDirectoryType->TypeName,
+
+ RtlInitUnicodeString(&ObDirectoryType->TypeName,
L"Directory");
/* create 'type' object type*/
ObTypeObjectType->Tag = TAG('T', 'y', 'p', 'T');
ObTypeObjectType->TotalObjects = 0;
ObTypeObjectType->TotalHandles = 0;
- ObTypeObjectType->MaxObjects = ULONG_MAX;
- ObTypeObjectType->MaxHandles = ULONG_MAX;
+ ObTypeObjectType->PeakObjects = 0;
+ ObTypeObjectType->PeakHandles = 0;
ObTypeObjectType->PagedPoolCharge = 0;
ObTypeObjectType->NonpagedPoolCharge = sizeof(TYPE_OBJECT);
ObTypeObjectType->Mapping = &ObpTypeMapping;
ObTypeObjectType->OkayToClose = NULL;
ObTypeObjectType->Create = NULL;
ObTypeObjectType->DuplicationNotify = NULL;
-
- RtlInitUnicodeStringFromLiteral(&ObTypeObjectType->TypeName,
+
+ RtlInitUnicodeString(&ObTypeObjectType->TypeName,
L"ObjectType");
- /* create root directory */
+ /* Create security descriptor */
+ RtlCreateSecurityDescriptor(&SecurityDescriptor,
+ SECURITY_DESCRIPTOR_REVISION1);
+
+ RtlSetOwnerSecurityDescriptor(&SecurityDescriptor,
+ SeAliasAdminsSid,
+ FALSE);
+
+ RtlSetGroupSecurityDescriptor(&SecurityDescriptor,
+ SeLocalSystemSid,
+ FALSE);
+
+ RtlSetDaclSecurityDescriptor(&SecurityDescriptor,
+ TRUE,
+ SePublicDefaultDacl,
+ FALSE);
+
+ /* Create root directory */
+ InitializeObjectAttributes(&ObjectAttributes,
+ NULL,
+ OBJ_PERMANENT,
+ NULL,
+ &SecurityDescriptor);
ObCreateObject(KernelMode,
ObDirectoryType,
- NULL,
+ &ObjectAttributes,
KernelMode,
NULL,
sizeof(DIRECTORY_OBJECT),
0,
(PVOID*)&NameSpaceRoot);
- /* create '\ObjectTypes' directory */
- RtlInitUnicodeStringFromLiteral(&Name,
+ /* Create '\ObjectTypes' directory */
+ RtlRosInitUnicodeStringFromLiteral(&Name,
L"\\ObjectTypes");
InitializeObjectAttributes(&ObjectAttributes,
&Name,
OBJ_PERMANENT,
NULL,
- NULL);
+ &SecurityDescriptor);
ObCreateObject(KernelMode,
ObDirectoryType,
&ObjectAttributes,
/* Create 'symbolic link' object type */
ObInitSymbolicLinkImplementation();
-
- /* Create 'section' object type */
- ObpCreateTypeObject(MmSectionObjectType);
+
+ /* FIXME: Hack Hack! */
+ ObSystemDeviceMap = ExAllocatePoolWithTag(NonPagedPool, sizeof(*ObSystemDeviceMap), TAG('O', 'b', 'D', 'm'));
+ RtlZeroMemory(ObSystemDeviceMap, sizeof(*ObSystemDeviceMap));
}