Fixed ObCreateObject() and ObInsertObject().
svn path=/trunk/; revision=6140
IN PVOID Object,
IN POBJECT_TYPE Type);
+NTSTATUS STDCALL
+ObCreateObject (IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL,
+ IN POBJECT_TYPE ObjectType,
+ IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+ IN KPROCESSOR_MODE AccessMode,
+ IN OUT PVOID ParseContext OPTIONAL,
+ IN ULONG ObjectSize,
+ IN ULONG PagedPoolCharge OPTIONAL,
+ IN ULONG NonPagedPoolCharge OPTIONAL,
+ OUT PVOID *Object);
+
VOID FASTCALL
ObfDereferenceObject(IN PVOID Object);
#ifndef _INCLUDE_DDK_OBTYPES_H
#define _INCLUDE_DDK_OBTYPES_H
-/* $Id: obtypes.h,v 1.3 2003/06/02 10:02:16 ekohl Exp $ */
+/* $Id: obtypes.h,v 1.4 2003/09/25 20:00:25 ekohl Exp $ */
struct _DIRECTORY_OBJECT;
struct _OBJECT_ATTRIBUTES;
LONG HandleCount;
BOOLEAN CloseInProcess;
BOOLEAN Permanent;
+ BOOLEAN Inherit;
struct _DIRECTORY_OBJECT* Parent;
POBJECT_TYPE ObjectType;
#endif /* __USE_W32API */
-NTSTATUS STDCALL
-ObRosCreateObject(OUT PHANDLE Handle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- IN POBJECT_TYPE Type,
- OUT PVOID *Object);
-
/* BEGIN REACTOS ONLY */
typedef enum _TRAVERSE_METHOD {
DPRINT("RemainingPath %S ParentObject %x\n", RemainingPath.Buffer, Object);
- Status = ObRosCreateObject(KeyHandle,
- DesiredAccess,
- NULL,
+ Status = ObCreateObject(ExGetPreviousMode(),
CmiKeyType,
+ NULL,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(KEY_OBJECT),
+ 0,
+ 0,
(PVOID*)&KeyObject);
if (!NT_SUCCESS(Status))
{
return(Status);
}
+ Status = ObInsertObject((PVOID)KeyObject,
+ NULL,
+ DesiredAccess,
+ 0,
+ NULL,
+ KeyHandle);
+ if (!NT_SUCCESS(Status))
+ {
+ ObDereferenceObject(KeyObject);
+ return(Status);
+ }
+
KeyObject->ParentKey = Object;
if (CreateOptions & REG_OPTION_VOLATILE)
-/* $Id: registry.c,v 1.107 2003/07/21 21:53:51 royce Exp $
+/* $Id: registry.c,v 1.108 2003/09/25 20:03:11 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
/* Create '\Registry' key. */
RtlInitUnicodeString(&KeyName, REG_ROOT_KEY_NAME);
InitializeObjectAttributes(&ObjectAttributes, &KeyName, 0, NULL, NULL);
- Status = ObRosCreateObject(&RootKeyHandle,
- STANDARD_RIGHTS_REQUIRED,
- &ObjectAttributes,
- CmiKeyType,
- (PVOID *) &RootKey);
+ Status = ObCreateObject(KernelMode,
+ CmiKeyType,
+ &ObjectAttributes,
+ KernelMode,
+ NULL,
+ sizeof(KEY_OBJECT),
+ 0,
+ 0,
+ (PVOID *) &RootKey);
assert(NT_SUCCESS(Status));
- Status = ObReferenceObjectByHandle(RootKeyHandle,
- STANDARD_RIGHTS_REQUIRED,
- CmiKeyType,
- KernelMode,
- (PVOID *)&RootKey,
- NULL);
+ Status = ObInsertObject(RootKey,
+ NULL,
+ STANDARD_RIGHTS_REQUIRED,
+ 0,
+ NULL,
+ &RootKeyHandle);
assert(NT_SUCCESS(Status));
RootKey->RegistryHive = CmiVolatileHive;
RootKey->BlockOffset = CmiVolatileHive->HiveHeader->RootKeyCell;
DPRINT("RemainingPath %wZ ParentKey %p\n",
&RemainingPath, ParentKey);
- Status = ObRosCreateObject(NULL,
- STANDARD_RIGHTS_REQUIRED,
- NULL,
+ Status = ObCreateObject(KernelMode,
CmiKeyType,
+ NULL,
+ KernelMode,
+ NULL,
+ sizeof(KEY_OBJECT),
+ 0,
+ 0,
(PVOID*)&NewKey);
if (!NT_SUCCESS(Status))
{
- return Status;
- }
-
- if (!NT_SUCCESS(Status))
- {
- DPRINT1 ("ObRosCreateObject() failed (Status %lx)\n", Status);
+ DPRINT1 ("ObCreateObject() failed (Status %lx)\n", Status);
ObDereferenceObject (ParentKey);
return Status;
}
/* Create new key object and put into linked list */
DPRINT("CmiObjectParse: %s\n", Path);
- Status = ObRosCreateObject(NULL,
- STANDARD_RIGHTS_REQUIRED,
- NULL,
+ Status = ObCreateObject(KernelMode,
CmiKeyType,
+ NULL,
+ KernelMode,
+ NULL,
+ sizeof(KEY_OBJECT),
+ 0,
+ 0,
(PVOID*)&FoundObject);
if (!NT_SUCCESS(Status))
{
};
-#define OBJECT_ALLOC_SIZE(type) (type->NonpagedPoolCharge+sizeof(OBJECT_HEADER)-sizeof(COMMON_BODY_HEADER))
+#define OBJECT_ALLOC_SIZE(ObjectSize) ((ObjectSize)+sizeof(OBJECT_HEADER)-sizeof(COMMON_BODY_HEADER))
extern PDIRECTORY_OBJECT NameSpaceRoot;
-/* $Id: create.c,v 1.67 2003/07/11 01:23:14 royce Exp $
+/* $Id: create.c,v 1.68 2003/09/25 20:04:27 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
IoCreateStreamFileObject(PFILE_OBJECT FileObject,
PDEVICE_OBJECT DeviceObject)
{
- HANDLE FileHandle;
PFILE_OBJECT CreatedFileObject;
NTSTATUS Status;
assert_irql(PASSIVE_LEVEL);
- Status = ObRosCreateObject(&FileHandle,
- STANDARD_RIGHTS_REQUIRED,
- NULL,
+ Status = ObCreateObject(KernelMode,
IoFileObjectType,
+ NULL,
+ KernelMode,
+ NULL,
+ sizeof(FILE_OBJECT),
+ 0,
+ 0,
(PVOID*)&CreatedFileObject);
if (!NT_SUCCESS(Status))
{
// shouldn't we initialize the lock event, and several other things here too?
KeInitializeEvent(&CreatedFileObject->Event, NotificationEvent, FALSE);
- ZwClose(FileHandle);
-
- return(CreatedFileObject);
+ return CreatedFileObject;
}
*FileHandle = 0;
- Status = ObRosCreateObject(FileHandle,
- DesiredAccess,
- ObjectAttributes,
+ Status = ObCreateObject(ExGetPreviousMode(),
IoFileObjectType,
+ ObjectAttributes,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(FILE_OBJECT),
+ 0,
+ 0,
(PVOID*)&FileObject);
if (!NT_SUCCESS(Status))
{
- DPRINT("ObRosCreateObject() failed! (Status %lx)\n", Status);
+ DPRINT("ObCreateObject() failed! (Status %lx)\n", Status);
return(Status);
}
+
+ Status = ObInsertObject ((PVOID)FileObject,
+ NULL,
+ DesiredAccess,
+ 0,
+ NULL,
+ FileHandle);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT("ObInsertObject() failed! (Status %lx)\n", Status);
+ ObDereferenceObject (FileObject);
+ return(Status);
+ }
+
if (CreateOptions & FILE_SYNCHRONOUS_IO_ALERT)
{
FileObject->Flags |= (FO_ALERTABLE_IO | FO_SYNCHRONOUS_IO);
-/* $Id: device.c,v 1.59 2003/09/25 15:54:42 navaraf Exp $
+/* $Id: device.c,v 1.60 2003/09/25 20:04:27 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
ULONG DriverImageSize)
{
PDRIVER_OBJECT Object;
- HANDLE DriverHandle = 0;
ULONG i;
WCHAR NameBuffer[MAX_PATH];
UNICODE_STRING DriverName;
NULL,
NULL);
- /* Create module object */
- Status = ObRosCreateObject(&DriverHandle,
- STANDARD_RIGHTS_REQUIRED,
- &ObjectAttributes,
+ /* Create driver object */
+ Status = ObCreateObject(KernelMode,
IoDriverObjectType,
+ &ObjectAttributes,
+ KernelMode,
+ NULL,
+ sizeof(DRIVER_OBJECT),
+ 0,
+ 0,
(PVOID*)&Object);
if (!NT_SUCCESS(Status))
{
return(Status);
}
- NtClose(DriverHandle);
-
/* Create driver extension */
Object->DriverExtension = (PDRIVER_EXTENSION)
ExAllocatePoolWithTag(NonPagedPool,
if (DeviceName != NULL)
{
InitializeObjectAttributes(&ObjectAttributes,DeviceName,0,NULL,NULL);
- Status = ObRosCreateObject(NULL,
- 0,
- &ObjectAttributes,
+ Status = ObCreateObject(KernelMode,
IoDeviceObjectType,
+ &ObjectAttributes,
+ KernelMode,
+ NULL,
+ sizeof(DEVICE_OBJECT),
+ 0,
+ 0,
(PVOID*)&CreatedDeviceObject);
}
else
{
- Status = ObRosCreateObject(NULL,
- 0,
- NULL,
+ Status = ObCreateObject(KernelMode,
IoDeviceObjectType,
+ NULL,
+ KernelMode,
+ NULL,
+ sizeof(DEVICE_OBJECT),
+ 0,
+ 0,
(PVOID*)&CreatedDeviceObject);
}
if (!NT_SUCCESS(Status))
{
- DPRINT("IoCreateDevice() ObRosCreateObject failed, status: 0x%08X\n", Status);
+ DPRINT("IoCreateDevice() ObCreateObject failed, status: 0x%08X\n", Status);
return(Status);
}
{
PKQUEUE Queue;
NTSTATUS Status;
-
- Status = ObRosCreateObject(IoCompletionHandle,
- DesiredAccess,
- ObjectAttributes,
+
+ Status = ObCreateObject(ExGetPreviousMode(),
ExIoCompletionType,
+ ObjectAttributes,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(KQUEUE),
+ 0,
+ 0,
(PVOID*)&Queue);
+ if (!NT_SUCCESS(Status))
+ {
+ return Status;
+ }
- if (NT_SUCCESS(Status))
+ Status = ObInsertObject ((PVOID)Queue,
+ NULL,
+ DesiredAccess,
+ 0,
+ NULL,
+ IoCompletionHandle);
+ if (!NT_SUCCESS(Status))
{
- (void) KeInitializeQueue(Queue, NumberOfConcurrentThreads);
- ObDereferenceObject(Queue);
+ ObDereferenceObject(Queue);
+ return Status;
}
- return Status;
+ KeInitializeQueue(Queue, NumberOfConcurrentThreads);
+ ObDereferenceObject(Queue);
+
+ return STATUS_SUCCESS;
/*
CompletionPort = NULL OR ExistingCompletionPort
-/* $Id: connect.c,v 1.19 2003/08/07 11:47:33 silverblade Exp $
+/* $Id: connect.c,v 1.20 2003/09/25 20:04:59 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
/*
* Create a port to represent our side of the connection
*/
- Status = ObRosCreateObject (NULL,
- PORT_ALL_ACCESS,
- NULL,
+ Status = ObCreateObject (KernelMode,
ExPortType,
+ NULL,
+ KernelMode,
+ NULL,
+ sizeof(EPORT),
+ 0,
+ 0,
(PVOID*)&OurPort);
if (!NT_SUCCESS(Status))
{
*/
if (AcceptIt)
{
- Status = ObRosCreateObject(ServerPortHandle,
- PORT_ALL_ACCESS,
- NULL,
+ Status = ObCreateObject(ExGetPreviousMode(),
ExPortType,
+ NULL,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(EPORT),
+ 0,
+ 0,
(PVOID*)&OurPort);
if (!NT_SUCCESS(Status))
{
ObDereferenceObject(NamedPort);
return(Status);
}
+
+ Status = ObInsertObject ((PVOID)OurPort,
+ NULL,
+ PORT_ALL_ACCESS,
+ 0,
+ NULL,
+ ServerPortHandle);
+ if (!NT_SUCCESS(Status))
+ {
+ ObDereferenceObject(OurPort);
+ ExFreePool(CReply);
+ ObDereferenceObject(NamedPort);
+ return(Status);
+ }
+
NiInitializePort(OurPort);
}
-
+
/*
* Dequeue the connection request
*/
-/* $Id: create.c,v 1.12 2003/07/11 01:23:15 royce Exp $
+/* $Id: create.c,v 1.13 2003/09/25 20:04:59 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
{
return (Status);
}
+
/* Ask Ob to create the object */
- Status = ObRosCreateObject (PortHandle,
- PORT_ALL_ACCESS,
- ObjectAttributes,
+ Status = ObCreateObject (ExGetPreviousMode(),
ExPortType,
+ ObjectAttributes,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(EPORT),
+ 0,
+ 0,
(PVOID*)&Port);
if (!NT_SUCCESS(Status))
{
return (Status);
}
-
+
+ Status = ObInsertObject ((PVOID)Port,
+ NULL,
+ PORT_ALL_ACCESS,
+ 0,
+ NULL,
+ PortHandle);
+ if (!NT_SUCCESS(Status))
+ {
+ ObDereferenceObject (Port);
+ return (Status);
+ }
+
Status = NiInitializePort (Port);
Port->MaxConnectInfoLength = 260; /* FIXME: use a macro! */
Port->MaxDataLength = 328; /* FIXME: use a macro! */
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-/* $Id: section.c,v 1.127 2003/08/20 00:02:31 dwelch Exp $
+/* $Id: section.c,v 1.128 2003/09/25 20:05:44 ekohl Exp $
*
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/mm/section.c
/*
* Create the section
*/
- Status = ObRosCreateObject(SectionHandle,
- DesiredAccess,
- ObjectAttributes,
+ Status = ObCreateObject(ExGetPreviousMode(),
MmSectionObjectType,
+ ObjectAttributes,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(SECTION_OBJECT),
+ 0,
+ 0,
(PVOID*)&Section);
if (!NT_SUCCESS(Status))
{
return(Status);
}
-
+
+ Status = ObInsertObject ((PVOID)Section,
+ NULL,
+ DesiredAccess,
+ 0,
+ NULL,
+ SectionHandle);
+ if (!NT_SUCCESS(Status))
+ {
+ ObDereferenceObject(Section);
+ return(Status);
+ }
+
/*
* Initialize it
*/
/*
* Create the section
*/
- Status = ObRosCreateObject(SectionHandle,
- DesiredAccess,
- ObjectAttributes,
+ Status = ObCreateObject(ExGetPreviousMode(),
MmSectionObjectType,
+ ObjectAttributes,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(SECTION_OBJECT),
+ 0,
+ 0,
(PVOID*)&Section);
if (!NT_SUCCESS(Status))
{
return(Status);
}
-
+
+ Status = ObInsertObject ((PVOID)Section,
+ NULL,
+ DesiredAccess,
+ 0,
+ NULL,
+ SectionHandle);
+ if (!NT_SUCCESS(Status))
+ {
+ ObDereferenceObject(Section);
+ return(Status);
+ }
+
/*
* Initialize it
*/
/*
* Create the section
*/
- Status = ObRosCreateObject(SectionHandle,
- DesiredAccess,
- ObjectAttributes,
- MmSectionObjectType,
- (PVOID*)&Section);
+ Status = ObCreateObject (ExGetPreviousMode(),
+ MmSectionObjectType,
+ ObjectAttributes,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(SECTION_OBJECT),
+ 0,
+ 0,
+ (PVOID*)&Section);
if (!NT_SUCCESS(Status))
{
ObDereferenceObject(FileObject);
return(Status);
}
+ Status = ObInsertObject ((PVOID)Section,
+ NULL,
+ DesiredAccess,
+ 0,
+ NULL,
+ SectionHandle);
+ if (!NT_SUCCESS(Status))
+ {
+ ObDereferenceObject(Section);
+ ObDereferenceObject(FileObject);
+ ExFreePool(ImageSections);
+ return(Status);
+ }
+
/*
* Initialize it
*/
/*
* Create the section
*/
- Status = ObRosCreateObject(SectionHandle,
- DesiredAccess,
- ObjectAttributes,
- MmSectionObjectType,
- (PVOID*)&Section);
+ Status = ObCreateObject (ExGetPreviousMode(),
+ MmSectionObjectType,
+ ObjectAttributes,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(SECTION_OBJECT),
+ 0,
+ 0,
+ (PVOID*)&Section);
+ if (!NT_SUCCESS(Status))
+ {
+ ObDereferenceObject(FileObject);
+ return(Status);
+ }
+
+ Status = ObInsertObject ((PVOID)Section,
+ NULL,
+ DesiredAccess,
+ 0,
+ NULL,
+ SectionHandle);
if (!NT_SUCCESS(Status))
{
+ ObDereferenceObject(Section);
ObDereferenceObject(FileObject);
return(Status);
}
-/* $Id: evtpair.c,v 1.16 2003/09/14 09:18:04 hbirr Exp $
+/* $Id: evtpair.c,v 1.17 2003/09/25 20:06:32 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
NTSTATUS Status;
DPRINT("NtCreateEventPair()\n");
- Status = ObRosCreateObject(EventPairHandle,
- DesiredAccess,
- ObjectAttributes,
+ Status = ObCreateObject(ExGetPreviousMode(),
ExEventPairObjectType,
+ ObjectAttributes,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(KEVENT_PAIR),
+ 0,
+ 0,
(PVOID*)&EventPair);
if (!NT_SUCCESS(Status))
{
return(Status);
}
+
KeInitializeEvent(&EventPair->LowEvent,
SynchronizationEvent,
FALSE);
KeInitializeEvent(&EventPair->HighEvent,
SynchronizationEvent,
FALSE);
+
+ Status = ObInsertObject ((PVOID)EventPair,
+ NULL,
+ DesiredAccess,
+ 0,
+ NULL,
+ EventPairHandle);
+
ObDereferenceObject(EventPair);
- return(STATUS_SUCCESS);
+
+ return Status;
}
PKMUTEX Mutant;
NTSTATUS Status;
- Status = ObRosCreateObject(MutantHandle,
- DesiredAccess,
- ObjectAttributes,
+ Status = ObCreateObject(ExGetPreviousMode(),
ExMutantObjectType,
+ ObjectAttributes,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(KMUTANT),
+ 0,
+ 0,
(PVOID*)&Mutant);
if (!NT_SUCCESS(Status))
{
return(Status);
}
+
KeInitializeMutant(Mutant,
InitialOwner);
+
+ Status = ObInsertObject ((PVOID)Mutant,
+ NULL,
+ DesiredAccess,
+ 0,
+ NULL,
+ MutantHandle);
+
ObDereferenceObject(Mutant);
- return(STATUS_SUCCESS);
+ return Status;
}
ObjectAttributes = NULL;
}
- Status = ObRosCreateObject(&EventHandle,
- DesiredAccess,
- ObjectAttributes,
+ Status = ObCreateObject(ExGetPreviousMode(),
ExEventObjectType,
+ ObjectAttributes,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(KEVENT),
+ 0,
+ 0,
(PVOID*)&Event);
if (!NT_SUCCESS(Status))
{
KeInitializeEvent(Event,
ManualReset ? NotificationEvent : SynchronizationEvent,
InitialState);
+
+ Status = ObInsertObject ((PVOID)Event,
+ NULL,
+ DesiredAccess,
+ 0,
+ NULL,
+ &EventHandle);
ObDereferenceObject(Event);
+ if (!NT_SUCCESS(Status))
+ {
+ return Status;
+ }
Status = MmCopyToCaller(UnsafeEventHandle, &EventHandle, sizeof(HANDLE));
if (!NT_SUCCESS(Status))
-/* $Id: ntsem.c,v 1.18 2003/06/07 12:23:14 chorns Exp $
+/* $Id: ntsem.c,v 1.19 2003/09/25 20:06:32 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
{
PKSEMAPHORE Semaphore;
NTSTATUS Status;
-
- Status = ObRosCreateObject(SemaphoreHandle,
- DesiredAccess,
- ObjectAttributes,
+
+ Status = ObCreateObject(ExGetPreviousMode(),
ExSemaphoreType,
+ ObjectAttributes,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(KSEMAPHORE),
+ 0,
+ 0,
(PVOID*)&Semaphore);
if (!NT_SUCCESS(Status))
{
return(Status);
}
+
KeInitializeSemaphore(Semaphore,
InitialCount,
MaximumCount);
+
+ Status = ObInsertObject ((PVOID)Semaphore,
+ NULL,
+ DesiredAccess,
+ 0,
+ NULL,
+ SemaphoreHandle);
+
ObDereferenceObject(Semaphore);
- return(STATUS_SUCCESS);
+
+ return Status;
}
-/* $Id: nttimer.c,v 1.19 2003/06/07 12:23:14 chorns Exp $
+/* $Id: nttimer.c,v 1.20 2003/09/25 20:06:32 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
NTSTATUS Status;
DPRINT("NtCreateTimer()\n");
- Status = ObRosCreateObject(TimerHandle,
- DesiredAccess,
- ObjectAttributes,
+ Status = ObCreateObject(ExGetPreviousMode(),
ExTimerType,
+ ObjectAttributes,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(NTTIMER),
+ 0,
+ 0,
(PVOID*)&Timer);
if (!NT_SUCCESS(Status))
return Status;
Timer->Running = FALSE;
+ Status = ObInsertObject ((PVOID)Timer,
+ NULL,
+ DesiredAccess,
+ 0,
+ NULL,
+ TimerHandle);
+
ObDereferenceObject(Timer);
- return(STATUS_SUCCESS);
+ return Status;
}
/*
* Create the object
*/
- Status = ObRosCreateObject(&ProfileHandle,
- STANDARD_RIGHTS_ALL,
- NULL,
+ Status = ObCreateObject(ExGetPreviousMode(),
ExProfileObjectType,
+ NULL,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(KPROFILE),
+ 0,
+ 0,
(PVOID*)&Profile);
if (!NT_SUCCESS(Status))
{
*/
KiInsertProfile(Profile);
+ Status = ObInsertObject ((PVOID)Profile,
+ NULL,
+ STANDARD_RIGHTS_ALL,
+ 0,
+ NULL,
+ &ProfileHandle);
+ if (!NT_SUCCESS(Status))
+ {
+ ObDereferenceObject (Profile);
+ return Status;
+ }
+
/*
* Copy the created handle back to the caller
*/
-; $Id: ntoskrnl.def,v 1.166 2003/09/25 18:29:45 navaraf Exp $
+; $Id: ntoskrnl.def,v 1.167 2003/09/25 20:02:09 ekohl Exp $
;
; reactos/ntoskrnl/ntoskrnl.def
;
;ObCheckCreateObjectAccess@28
;ObCheckObjectAccess@20
ObCreateObject@36
-ObRosCreateObject@20
;ObFindHandleForObject@20
ObGetObjectPointerCount@4
ObGetObjectSecurity@12
-;ObInsertObject@24
+ObInsertObject@24
ObMakeTemporaryObject@4
ObOpenObjectByName@28
ObOpenObjectByPointer@28
-; $Id: ntoskrnl.edf,v 1.153 2003/09/25 15:54:42 navaraf Exp $
+; $Id: ntoskrnl.edf,v 1.154 2003/09/25 20:02:09 ekohl Exp $
;
; reactos/ntoskrnl/ntoskrnl.def
;
;ObCheckCreateObjectAccess=ObCheckCreateObjectAccess@28
;ObCheckObjectAccess=ObCheckObjectAccess@20
ObCreateObject=ObCreateObject@36
-ObRosCreateObject=ObRosCreateObject@20
;ObFindHandleForObject=ObFindHandleForObject@20
ObGetObjectPointerCount=ObGetObjectPointerCount@4
ObGetObjectSecurity=ObGetObjectSecurity@12
-;ObInsertObject=ObInsertObject@24
+ObInsertObject=ObInsertObject@24
ObMakeTemporaryObject=ObMakeTemporaryObject@4
ObOpenObjectByName=ObOpenObjectByName@28
ObOpenObjectByPointer=ObOpenObjectByPointer@28
-/* $Id: dirobj.c,v 1.19 2003/09/03 20:15:02 ekohl Exp $
+/* $Id: dirobj.c,v 1.20 2003/09/25 20:07:46 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes)
{
- PDIRECTORY_OBJECT dir;
+ PDIRECTORY_OBJECT DirectoryObject;
+ NTSTATUS Status;
- DPRINT("NtCreateDirectoryObject(DirectoryHandle %x, "
- "DesiredAccess %x, ObjectAttributes %x, "
- "ObjectAttributes->ObjectName %S)\n",
- DirectoryHandle, DesiredAccess, ObjectAttributes,
- ObjectAttributes->ObjectName);
-
- return(ObRosCreateObject(DirectoryHandle,
- DesiredAccess,
- ObjectAttributes,
- ObDirectoryType,
- (PVOID*)&dir));
+ DPRINT("NtCreateDirectoryObject(DirectoryHandle %x, "
+ "DesiredAccess %x, ObjectAttributes %x, "
+ "ObjectAttributes->ObjectName %wZ)\n",
+ DirectoryHandle, DesiredAccess, ObjectAttributes,
+ ObjectAttributes->ObjectName);
+
+ Status = ObCreateObject (ExGetPreviousMode(),
+ ObDirectoryType,
+ ObjectAttributes,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(DIRECTORY_OBJECT),
+ 0,
+ 0,
+ (PVOID*)&DirectoryObject);
+ if (!NT_SUCCESS(Status))
+ {
+ return Status;
+ }
+
+ Status = ObInsertObject ((PVOID)DirectoryObject,
+ NULL,
+ DesiredAccess,
+ 0,
+ NULL,
+ DirectoryHandle);
+
+ ObDereferenceObject(DirectoryObject);
+
+ return Status;
}
/* EOF */
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-/* $Id: handle.c,v 1.50 2003/09/14 09:19:07 hbirr Exp $
+/* $Id: handle.c,v 1.51 2003/09/25 20:07:46 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* @implemented
*/
NTSTATUS STDCALL
-ObInsertObject(PVOID Object,
- PACCESS_STATE PassedAccessState,
- ACCESS_MASK DesiredAccess,
- ULONG AdditionalReferences,
- PVOID* ReferencedObject,
- PHANDLE Handle)
+ObInsertObject(IN PVOID Object,
+ IN PACCESS_STATE PassedAccessState OPTIONAL,
+ IN ACCESS_MASK DesiredAccess,
+ IN ULONG AdditionalReferences,
+ OUT PVOID* ReferencedObject OPTIONAL,
+ OUT PHANDLE Handle)
{
+ POBJECT_HEADER ObjectHeader;
+ ACCESS_MASK Access;
+
+ Access = DesiredAccess;
+ ObjectHeader = BODY_TO_HEADER(Object);
+
+ RtlMapGenericMask(&Access,
+ ObjectHeader->ObjectType->Mapping);
+
return(ObCreateHandle(PsGetCurrentProcess(),
Object,
- DesiredAccess,
- FALSE,
+ Access,
+ ObjectHeader->Inherit,
Handle));
}
-/* $Id: namespc.c,v 1.39 2003/07/10 21:34:29 royce Exp $
+/* $Id: namespc.c,v 1.40 2003/09/25 20:07:46 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
L"ObjectType");
/* create root directory */
- ObRosCreateObject(NULL,
- STANDARD_RIGHTS_REQUIRED,
- NULL,
+ ObCreateObject(KernelMode,
ObDirectoryType,
+ NULL,
+ KernelMode,
+ NULL,
+ sizeof(DIRECTORY_OBJECT),
+ 0,
+ 0,
(PVOID*)&NameSpaceRoot);
/* create '\ObjectTypes' directory */
OBJ_PERMANENT,
NULL,
NULL);
- ObRosCreateObject(NULL,
- STANDARD_RIGHTS_REQUIRED,
- &ObjectAttributes,
+ ObCreateObject(KernelMode,
ObDirectoryType,
+ &ObjectAttributes,
+ KernelMode,
+ NULL,
+ sizeof(DIRECTORY_OBJECT),
+ 0,
+ 0,
NULL);
ObpCreateTypeObject(ObDirectoryType);
OBJ_PERMANENT,
NULL,
NULL);
- Status = ObRosCreateObject(NULL,
- STANDARD_RIGHTS_REQUIRED,
- &ObjectAttributes,
+ Status = ObCreateObject(KernelMode,
ObTypeObjectType,
+ &ObjectAttributes,
+ KernelMode,
+ NULL,
+ sizeof(TYPE_OBJECT),
+ 0,
+ 0,
(PVOID*)&TypeObject);
if (NT_SUCCESS(Status))
{
-/* $Id: object.c,v 1.68 2003/09/25 05:12:24 vizzini Exp $
+/* $Id: object.c,v 1.69 2003/09/25 20:07:46 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
}
-/**********************************************************************
- * NAME PRIVATE
- * ObInitializeObject
- *
- * DESCRIPTION
- *
- * ARGUMENTS
- *
- * RETURN VALUE
- */
-VOID ObInitializeObject(POBJECT_HEADER ObjectHeader,
- PHANDLE Handle,
- ACCESS_MASK DesiredAccess,
- POBJECT_TYPE Type,
- POBJECT_ATTRIBUTES ObjectAttributes)
-{
- ObjectHeader->HandleCount = 0;
- ObjectHeader->RefCount = 1;
- ObjectHeader->ObjectType = Type;
- if (ObjectAttributes != NULL &&
- ObjectAttributes->Attributes & OBJ_PERMANENT)
- {
- ObjectHeader->Permanent = TRUE;
- }
- else
- {
- ObjectHeader->Permanent = FALSE;
- }
- RtlInitUnicodeString(&(ObjectHeader->Name),NULL);
- if (Handle != NULL)
- {
- ObCreateHandle(PsGetCurrentProcess(),
- HEADER_TO_BODY(ObjectHeader),
- DesiredAccess,
- ObjectAttributes && (ObjectAttributes->Attributes & OBJ_INHERIT) ? TRUE : FALSE,
- Handle);
- }
-}
-
-
/**********************************************************************
* NAME PRIVATE
* ObFindObject@16
/**********************************************************************
* NAME EXPORTED
- * ObRosCreateObject@20
+ * ObCreateObject@36
*
* DESCRIPTION
*
* ARGUMENTS
*
- * NOTE
- * Internal ReactOS function
* RETURN VALUE
+ * Status
+ *
+ * @implemented
*/
NTSTATUS STDCALL
-ObRosCreateObject (OUT PHANDLE Handle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
+ObCreateObject (IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL,
IN POBJECT_TYPE Type,
+ IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+ IN KPROCESSOR_MODE AccessMode,
+ IN OUT PVOID ParseContext OPTIONAL,
+ IN ULONG ObjectSize,
+ IN ULONG PagedPoolCharge OPTIONAL,
+ IN ULONG NonPagedPoolCharge OPTIONAL,
OUT PVOID *Object)
{
PVOID Parent = NULL;
assert_irql(APC_LEVEL);
- DPRINT("ObRosCreateObject(Handle %x, ObjectAttributes %x, Type %x)\n",
+ DPRINT("ObCreateObject(Handle %x, ObjectAttributes %x, Type %x)\n",
Handle, ObjectAttributes, Type);
if (ObjectAttributes != NULL &&
RtlInitUnicodeString(&RemainingPath, NULL);
}
- RtlMapGenericMask(&DesiredAccess,
- Type->Mapping);
-
Header = (POBJECT_HEADER)ExAllocatePoolWithTag(NonPagedPool,
- OBJECT_ALLOC_SIZE(Type),
+ OBJECT_ALLOC_SIZE(ObjectSize),
Type->Tag);
- ObInitializeObject(Header,
- NULL,
- DesiredAccess,
- Type,
- ObjectAttributes);
+ if (Header == NULL)
+ return STATUS_INSUFFICIENT_RESOURCES;
+
+ /* Initialize the object header */
+ Header->HandleCount = 0;
+ Header->RefCount = 1;
+ Header->ObjectType = Type;
+ if (ObjectAttributes != NULL &&
+ ObjectAttributes->Attributes & OBJ_PERMANENT)
+ {
+ Header->Permanent = TRUE;
+ }
+ else
+ {
+ Header->Permanent = FALSE;
+ }
+
+ if (ObjectAttributes != NULL &&
+ ObjectAttributes->Attributes & OBJ_INHERIT)
+ {
+ Header->Inherit = TRUE;
+ }
+ else
+ {
+ Header->Inherit = FALSE;
+ }
+
+ RtlInitUnicodeString(&(Header->Name),NULL);
if (Parent != NULL)
{
*Object = HEADER_TO_BODY(Header);
}
- if (Handle != NULL)
- {
- ObCreateHandle(PsGetCurrentProcess(),
- *Object,
- DesiredAccess,
- ObjectAttributes && (ObjectAttributes->Attributes & OBJ_INHERIT) ? TRUE : FALSE,
- Handle);
- }
-
return(STATUS_SUCCESS);
}
-/**********************************************************************
- * NAME EXPORTED
- * ObCreateObject@36
- *
- * DESCRIPTION
- *
- * ARGUMENTS
- *
- * RETURN VALUE
- *
- * @unimplemented
- */
-NTSTATUS STDCALL
-ObCreateObject (IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL,
- IN POBJECT_TYPE ObjectType,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN KPROCESSOR_MODE AccessMode,
- IN OUT PVOID ParseContext OPTIONAL,
- IN ULONG ObjectSize,
- IN ULONG PagedPoolCharge OPTIONAL,
- IN ULONG NonPagedPoolCharge OPTIONAL,
- OUT PVOID *Object)
-{
- UNIMPLEMENTED
- return STATUS_NOT_IMPLEMENTED;
-}
/*
* @implemented
-/* $Id: symlink.c,v 1.3 2003/09/03 15:12:16 ekohl Exp $
+/* $Id: symlink.c,v 1.4 2003/09/25 20:07:46 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
ObjectAttributes,
DeviceName);
- Status = ObRosCreateObject(SymbolicLinkHandle,
- DesiredAccess,
- ObjectAttributes,
+ Status = ObCreateObject(ExGetPreviousMode(),
ObSymbolicLinkType,
+ ObjectAttributes,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(SYMLNK_OBJECT),
+ 0,
+ 0,
(PVOID*)&SymbolicLink);
if (!NT_SUCCESS(Status))
{
return(Status);
}
+ Status = ObInsertObject ((PVOID)SymbolicLink,
+ NULL,
+ DesiredAccess,
+ 0,
+ NULL,
+ SymbolicLinkHandle);
+ if (!NT_SUCCESS(Status))
+ {
+ ObDereferenceObject (SymbolicLink);
+ return Status;
+ }
+
SymbolicLink->TargetName.Length = 0;
SymbolicLink->TargetName.MaximumLength =
((wcslen(DeviceName->Buffer) + 1) * sizeof(WCHAR));
-/* $Id: create.c,v 1.66 2003/09/14 10:50:29 hbirr Exp $
+/* $Id: create.c,v 1.67 2003/09/25 20:08:36 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
/*
* Create and initialize thread
*/
- Status = ObRosCreateObject(ThreadHandle,
- DesiredAccess,
- ThreadAttributes,
+ Status = ObCreateObject(UserMode,
PsThreadType,
+ ThreadAttributes,
+ UserMode,
+ NULL,
+ sizeof(ETHREAD),
+ 0,
+ 0,
(PVOID*)&Thread);
if (!NT_SUCCESS(Status))
{
return(Status);
}
+ Status = ObInsertObject ((PVOID)Thread,
+ NULL,
+ DesiredAccess,
+ 0,
+ NULL,
+ ThreadHandle);
+ if (!NT_SUCCESS(Status))
+ {
+ ObDereferenceObject (Thread);
+ return Status;
+ }
+
DPRINT("Thread = %x\n",Thread);
PiNrThreads++;
-/* $Id: process.c,v 1.115 2003/09/14 10:52:33 hbirr Exp $
+/* $Id: process.c,v 1.116 2003/09/25 20:08:36 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
/*
* Initialize the system process
*/
- Status = ObRosCreateObject(NULL,
- PROCESS_ALL_ACCESS,
- NULL,
+ Status = ObCreateObject(KernelMode,
PsProcessType,
+ NULL,
+ KernelMode,
+ NULL,
+ sizeof(EPROCESS),
+ 0,
+ 0,
(PVOID*)&PsInitialSystemProcess);
if (!NT_SUCCESS(Status))
{
return(Status);
}
- Status = ObRosCreateObject(ProcessHandle,
- DesiredAccess,
- ObjectAttributes,
+ Status = ObCreateObject(ExGetPreviousMode(),
PsProcessType,
+ ObjectAttributes,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(EPROCESS),
+ 0,
+ 0,
(PVOID*)&Process);
if (!NT_SUCCESS(Status))
{
ObDereferenceObject(ParentProcess);
- DPRINT("ObRosCreateObject() = %x\n",Status);
+ DPRINT("ObCreateObject() = %x\n",Status);
return(Status);
}
+ Status = ObInsertObject ((PVOID)Process,
+ NULL,
+ DesiredAccess,
+ 0,
+ NULL,
+ ProcessHandle);
+ if (!NT_SUCCESS(Status))
+ {
+ ObDereferenceObject (Process);
+ ObDereferenceObject (ParentProcess);
+ DPRINT("ObInsertObject() = %x\n",Status);
+ return Status;
+ }
+
KeInitializeDispatcherHeader(&Process->Pcb.DispatcherHeader,
InternalProcessType,
sizeof(EPROCESS),
-/* $Id: token.c,v 1.26 2003/07/11 01:23:16 royce Exp $
+/* $Id: token.c,v 1.27 2003/09/25 20:09:11 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
PACCESS_TOKEN AccessToken;
- Status = ObRosCreateObject(0,
- TOKEN_ALL_ACCESS,
- ObjectAttributes,
+ Status = ObCreateObject(PreviousMode,
SepTokenObjectType,
+ ObjectAttributes,
+ PreviousMode,
+ NULL,
+ sizeof(ACCESS_TOKEN),
+ 0,
+ 0,
(PVOID*)&AccessToken);
if (!NT_SUCCESS(Status))
{
- DPRINT1("ObRosCreateObject() failed (Status %lx)\n");
+ DPRINT1("ObCreateObject() failed (Status %lx)\n");
return(Status);
}
/*
* Initialize the token
*/
- Status = ObRosCreateObject(NULL,
- TOKEN_ALL_ACCESS,
- NULL,
- SepTokenObjectType,
- (PVOID*)&AccessToken);
+ Status = ObCreateObject(KernelMode,
+ SepTokenObjectType,
+ NULL,
+ KernelMode,
+ NULL,
+ sizeof(ACCESS_TOKEN),
+ 0,
+ 0,
+ (PVOID*)&AccessToken);
+ if (!NT_SUCCESS(Status))
+ {
+ return(Status);
+ }
Status = NtAllocateLocallyUniqueId(&AccessToken->TokenId);
if (!NT_SUCCESS(Status))
if (!NT_SUCCESS(Status))
return(Status);
- Status = ObRosCreateObject(&TokenHandle,
- DesiredAccess,
- ObjectAttributes,
+ Status = ObCreateObject(ExGetPreviousMode(),
SepTokenObjectType,
+ ObjectAttributes,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(ACCESS_TOKEN),
+ 0,
+ 0,
(PVOID*)&AccessToken);
if (!NT_SUCCESS(Status))
{
- DPRINT1("ObRosCreateObject() failed (Status %lx)\n");
+ DPRINT1("ObCreateObject() failed (Status %lx)\n");
return(Status);
}
+ Status = ObInsertObject ((PVOID)AccessToken,
+ NULL,
+ DesiredAccess,
+ 0,
+ NULL,
+ &TokenHandle);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("ObInsertObject() failed (Status %lx)\n");
+ ObDereferenceObject (AccessToken);
+ return Status;
+ }
+
RtlCopyLuid(&AccessToken->TokenSource.SourceIdentifier,
&TokenSource->SourceIdentifier);
memcpy(AccessToken->TokenSource.SourceName,
/*
* Normally we would just point these members into the variable information
- * area; however, our ObRosCreateObject() call can't allocate a variable information
+ * area; however, our ObCreateObject() call can't allocate a variable information
* area, so we allocate them seperately and provide a destroy function.
*/
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-/* $Id: winsta.c,v 1.35 2003/09/24 18:39:34 weiden Exp $
+/* $Id: winsta.c,v 1.36 2003/09/25 20:09:56 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
DPRINT("Creating window station (%wZ)\n", &WindowStationName);
- Status = ObRosCreateObject(&WinSta,
- STANDARD_RIGHTS_REQUIRED,
- &ObjectAttributes,
+ Status = ObCreateObject(ExGetPreviousMode(),
ExWindowStationObjectType,
+ &ObjectAttributes,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(WINSTATION_OBJECT),
+ 0,
+ 0,
(PVOID*)&WinStaObject);
if (!NT_SUCCESS(Status))
{
return (HWINSTA)0;
}
+ Status = ObInsertObject ((PVOID)WinStaObject,
+ NULL,
+ STANDARD_RIGHTS_REQUIRED,
+ 0,
+ NULL,
+ &WinSta);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT("Failed creating window station (%wZ)\n", &WindowStationName);
+ SetLastNtError(STATUS_INSUFFICIENT_RESOURCES);
+ ObDereferenceObject(WinStaObject);
+ return (HWINSTA)0;
+ }
+
WinStaObject->HandleTable = ObmCreateHandleTable();
if (!WinStaObject->HandleTable)
{
DPRINT("Status for open operation (0x%X)\n", Status);
- Status = ObRosCreateObject(&Desktop,
- STANDARD_RIGHTS_REQUIRED,
- &ObjectAttributes,
+ Status = ObCreateObject(ExGetPreviousMode(),
ExDesktopObjectType,
+ &ObjectAttributes,
+ ExGetPreviousMode(),
+ NULL,
+ sizeof(DESKTOP_OBJECT),
+ 0,
+ 0,
(PVOID*)&DesktopObject);
if (!NT_SUCCESS(Status))
{
SetLastNtError(STATUS_UNSUCCESSFUL);
return((HDESK)0);
}
-
+
/* Initialize some local (to win32k) desktop state. */
DesktopObject->ActiveMessageQueue = NULL;
DesktopObject->DesktopWindow =
DesktopWindowClass,
640, 480);
+ Status = ObInsertObject ((PVOID)DesktopObject,
+ NULL,
+ STANDARD_RIGHTS_REQUIRED,
+ 0,
+ NULL,
+ &Desktop);
+ ObDereferenceObject(DesktopObject);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT("Failed to create desktop handle\n");
+ SetLastNtError(STATUS_UNSUCCESSFUL);
+ return((HDESK)0);
+ }
+
return((HDESK)Desktop);
}