Removed incorrect Create/DuplicationNotify callbacks and replaced by a
more correct Open callback which is what a windows driver would get.
This is needed because of some changes I'm trying to make to get Parse
routines to work properly, so I had to add two hacks for now, they will
be removed within 2-3 commits
Modified: trunk/reactos/include/ddk/pstypes.h
Modified: trunk/reactos/ntoskrnl/cm/cm.h
Modified: trunk/reactos/ntoskrnl/cm/ntfunc.c
Modified: trunk/reactos/ntoskrnl/cm/registry.c
Modified: trunk/reactos/ntoskrnl/cm/regobj.c
Modified: trunk/reactos/ntoskrnl/ex/callback.c
Modified: trunk/reactos/ntoskrnl/ex/event.c
Modified: trunk/reactos/ntoskrnl/ex/evtpair.c
Modified: trunk/reactos/ntoskrnl/ex/mutant.c
Modified: trunk/reactos/ntoskrnl/ex/profile.c
Modified: trunk/reactos/ntoskrnl/ex/sem.c
Modified: trunk/reactos/ntoskrnl/ex/timer.c
Modified: trunk/reactos/ntoskrnl/ex/win32k.c
Modified: trunk/reactos/ntoskrnl/include/internal/ob.h
Modified: trunk/reactos/ntoskrnl/io/driver.c
Modified: trunk/reactos/ntoskrnl/io/iocomp.c
Modified: trunk/reactos/ntoskrnl/io/iomgr.c
Modified: trunk/reactos/ntoskrnl/ldr/init.c
Modified: trunk/reactos/ntoskrnl/lpc/create.c
Modified: trunk/reactos/ntoskrnl/lpc/port.c
Modified: trunk/reactos/ntoskrnl/mm/section.c
Modified: trunk/reactos/ntoskrnl/ob/dirobj.c
Modified: trunk/reactos/ntoskrnl/ob/handle.c
Modified: trunk/reactos/ntoskrnl/ob/namespc.c
Modified: trunk/reactos/ntoskrnl/ob/object.c
Modified: trunk/reactos/ntoskrnl/ob/symlink.c
Modified: trunk/reactos/ntoskrnl/ps/job.c
Modified: trunk/reactos/ntoskrnl/ps/psmgr.c
Modified: trunk/reactos/ntoskrnl/ps/security.c
Modified: trunk/reactos/ntoskrnl/ps/win32.c
Modified: trunk/reactos/ntoskrnl/se/token.c
Modified: trunk/reactos/subsys/win32k/include/desktop.h
Modified: trunk/reactos/subsys/win32k/include/winsta.h
Modified: trunk/reactos/subsys/win32k/main/dllmain.c
Modified: trunk/reactos/subsys/win32k/ntuser/desktop.c
Modified: trunk/reactos/subsys/win32k/ntuser/winsta.c
_____
Modified: trunk/reactos/include/ddk/pstypes.h
--- trunk/reactos/include/ddk/pstypes.h 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/include/ddk/pstypes.h 2005-05-15 04:56:52 UTC (rev
15293)
@@ -71,11 +71,20 @@
* Callbacks used for Win32 objects... this define won't be needed
after the Object Manager
* rewrite -- Alex
*/
+
+/* TEMPORARY HACK */
typedef NTSTATUS STDCALL_FUNC
(*OBJECT_CREATE_ROUTINE)(PVOID ObjectBody,
PVOID Parent,
PWSTR RemainingPath,
struct _OBJECT_ATTRIBUTES* ObjectAttributes);
+
+typedef NTSTATUS STDCALL_FUNC
+(*OBJECT_OPEN_ROUTINE)(ULONG Reason,
+ PVOID ObjectBody,
+ PEPROCESS Process,
+ ULONG HandleCount,
+ ACCESS_MASK GrantedAccess);
typedef NTSTATUS STDCALL_FUNC
(*OBJECT_PARSE_ROUTINE)(PVOID Object,
@@ -93,7 +102,7 @@
ULONG Attributes);
typedef struct _W32_OBJECT_CALLBACK {
- OBJECT_CREATE_ROUTINE WinStaCreate;
+ OBJECT_OPEN_ROUTINE WinStaCreate;
OBJECT_PARSE_ROUTINE WinStaParse;
OBJECT_DELETE_ROUTINE WinStaDelete;
OBJECT_FIND_ROUTINE WinStaFind;
_____
Modified: trunk/reactos/ntoskrnl/cm/cm.h
--- trunk/reactos/ntoskrnl/cm/cm.h 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/cm/cm.h 2005-05-15 04:56:52 UTC (rev
15293)
@@ -489,12 +489,6 @@
IN OUT PWSTR *Path,
IN ULONG Attribute);
-NTSTATUS STDCALL
-CmiObjectCreate(PVOID ObjectBody,
- PVOID Parent,
- PWSTR RemainingPath,
- POBJECT_ATTRIBUTES ObjectAttributes);
-
VOID STDCALL
CmiObjectDelete(PVOID DeletedObject);
_____
Modified: trunk/reactos/ntoskrnl/cm/ntfunc.c
--- trunk/reactos/ntoskrnl/cm/ntfunc.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/cm/ntfunc.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -225,13 +225,13 @@
if (Disposition)
*Disposition = REG_OPENED_EXISTING_KEY;
- Status = ObCreateHandle(PsGetCurrentProcess(),
+ Status = ObpCreateHandle(PsGetCurrentProcess(),
Object,
DesiredAccess,
TRUE,
KeyHandle);
- DPRINT("ObCreateHandle failed Status 0x%x\n", Status);
+ DPRINT("ObpCreateHandle failed Status 0x%x\n", Status);
ObDereferenceObject(Object);
RtlFreeUnicodeString(&RemainingPath);
return Status;
@@ -1182,7 +1182,7 @@
goto openkey_cleanup;
}
- Status = ObCreateHandle(PsGetCurrentProcess(),
+ Status = ObpCreateHandle(PsGetCurrentProcess(),
Object,
DesiredAccess,
TRUE,
_____
Modified: trunk/reactos/ntoskrnl/cm/registry.c
--- trunk/reactos/ntoskrnl/cm/registry.c 2005-05-14 22:55:21 UTC
(rev 15292)
+++ trunk/reactos/ntoskrnl/cm/registry.c 2005-05-15 04:56:52 UTC
(rev 15293)
@@ -366,8 +366,6 @@
CmiKeyType->Security = CmiObjectSecurity;
CmiKeyType->QueryName = CmiObjectQueryName;
CmiKeyType->OkayToClose = NULL;
- CmiKeyType->Create = CmiObjectCreate;
- CmiKeyType->DuplicationNotify = NULL;
RtlInitUnicodeString(&CmiKeyType->TypeName, L"Key");
ObpCreateTypeObject (CmiKeyType);
_____
Modified: trunk/reactos/ntoskrnl/cm/regobj.c
--- trunk/reactos/ntoskrnl/cm/regobj.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/cm/regobj.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -263,35 +263,6 @@
return(STATUS_SUCCESS);
}
-
-NTSTATUS STDCALL
-CmiObjectCreate(PVOID ObjectBody,
- PVOID Parent,
- PWSTR RemainingPath,
- POBJECT_ATTRIBUTES ObjectAttributes)
-{
- PKEY_OBJECT KeyObject = ObjectBody;
- PWSTR Start;
-
- KeyObject->ParentKey = Parent;
- if (RemainingPath)
- {
- Start = RemainingPath;
- if(*Start == L'\\')
- Start++;
- RtlpCreateUnicodeString(&KeyObject->Name,
- Start, NonPagedPool);
- }
- else
- {
- RtlInitUnicodeString(&KeyObject->Name,
- NULL);
- }
-
- return STATUS_SUCCESS;
-}
-
-
VOID STDCALL
CmiObjectDelete(PVOID DeletedObject)
{
_____
Modified: trunk/reactos/ntoskrnl/ex/callback.c
--- trunk/reactos/ntoskrnl/ex/callback.c 2005-05-14 22:55:21 UTC
(rev 15292)
+++ trunk/reactos/ntoskrnl/ex/callback.c 2005-05-15 04:56:52 UTC
(rev 15293)
@@ -65,9 +65,7 @@
ExCallbackObjectType->Parse = NULL;
ExCallbackObjectType->Security = NULL;
ExCallbackObjectType->QueryName = NULL;
- ExCallbackObjectType->DuplicationNotify = NULL;
ExCallbackObjectType->OkayToClose = NULL;
- ExCallbackObjectType->Create = NULL;
ExCallbackObjectType->Mapping = &ExpCallbackMapping;
ExCallbackObjectType->NonpagedPoolCharge =
sizeof(_INT_CALLBACK_OBJECT);
Status = ObpCreateTypeObject(ExCallbackObjectType);
_____
Modified: trunk/reactos/ntoskrnl/ex/event.c
--- trunk/reactos/ntoskrnl/ex/event.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/ex/event.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -55,8 +55,6 @@
ExEventObjectType->Security = NULL;
ExEventObjectType->QueryName = NULL;
ExEventObjectType->OkayToClose = NULL;
- ExEventObjectType->Create = NULL;
- ExEventObjectType->DuplicationNotify = NULL;
ObpCreateTypeObject(ExEventObjectType);
}
_____
Modified: trunk/reactos/ntoskrnl/ex/evtpair.c
--- trunk/reactos/ntoskrnl/ex/evtpair.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/ex/evtpair.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -52,8 +52,6 @@
ExEventPairObjectType->Security = NULL;
ExEventPairObjectType->QueryName = NULL;
ExEventPairObjectType->OkayToClose = NULL;
- ExEventPairObjectType->Create = NULL;
- ExEventPairObjectType->DuplicationNotify = NULL;
ObpCreateTypeObject(ExEventPairObjectType);
}
_____
Modified: trunk/reactos/ntoskrnl/ex/mutant.c
--- trunk/reactos/ntoskrnl/ex/mutant.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/ex/mutant.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -68,11 +68,10 @@
ExMutantObjectType->Close = NULL;
ExMutantObjectType->Delete = ExpDeleteMutant;
ExMutantObjectType->Parse = NULL;
+ ExMutantObjectType->Open = NULL;
ExMutantObjectType->Security = NULL;
ExMutantObjectType->QueryName = NULL;
ExMutantObjectType->OkayToClose = NULL;
- ExMutantObjectType->Create = NULL;
- ExMutantObjectType->DuplicationNotify = NULL;
ObpCreateTypeObject(ExMutantObjectType);
}
_____
Modified: trunk/reactos/ntoskrnl/ex/profile.c
--- trunk/reactos/ntoskrnl/ex/profile.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/ex/profile.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -94,10 +94,10 @@
ExProfileObjectType->Close = NULL;
ExProfileObjectType->Delete = ExpDeleteProfile;
ExProfileObjectType->Parse = NULL;
+ ExProfileObjectType->Open = NULL;
ExProfileObjectType->Security = NULL;
ExProfileObjectType->QueryName = NULL;
ExProfileObjectType->OkayToClose = NULL;
- ExProfileObjectType->Create = NULL;
ObpCreateTypeObject(ExProfileObjectType);
}
_____
Modified: trunk/reactos/ntoskrnl/ex/sem.c
--- trunk/reactos/ntoskrnl/ex/sem.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/ex/sem.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -54,8 +54,6 @@
ExSemaphoreObjectType->Security = NULL;
ExSemaphoreObjectType->QueryName = NULL;
ExSemaphoreObjectType->OkayToClose = NULL;
- ExSemaphoreObjectType->Create = NULL;
- ExSemaphoreObjectType->DuplicationNotify = NULL;
ObpCreateTypeObject(ExSemaphoreObjectType);
}
_____
Modified: trunk/reactos/ntoskrnl/ex/timer.c
--- trunk/reactos/ntoskrnl/ex/timer.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/ex/timer.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -244,10 +244,9 @@
ExTimerType->Delete = ExpDeleteTimer;
ExTimerType->Parse = NULL;
ExTimerType->Security = NULL;
+ ExTimerType->Open = NULL;
ExTimerType->QueryName = NULL;
ExTimerType->OkayToClose = NULL;
- ExTimerType->Create = NULL;
- ExTimerType->DuplicationNotify = NULL;
ObpCreateTypeObject(ExTimerType);
/* Initialize the Wait List and Lock */
_____
Modified: trunk/reactos/ntoskrnl/ex/win32k.c
--- trunk/reactos/ntoskrnl/ex/win32k.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/ex/win32k.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -39,7 +39,7 @@
DESKTOP_READOBJECTS |
DESKTOP_SWITCHDESKTOP | DESKTOP_WRITEOBJECTS
};
-OBJECT_CREATE_ROUTINE ExpWindowStationObjectCreate = NULL;
+OBJECT_OPEN_ROUTINE ExpWindowStationObjectOpen = NULL;
OBJECT_PARSE_ROUTINE ExpWindowStationObjectParse = NULL;
OBJECT_DELETE_ROUTINE ExpWindowStationObjectDelete = NULL;
OBJECT_FIND_ROUTINE ExpWindowStationObjectFind = NULL;
@@ -50,16 +50,18 @@
NTSTATUS
STDCALL
-ExpWinStaObjectCreate(PVOID ObjectBody,
- PVOID Parent,
- PWSTR RemainingPath,
- struct _OBJECT_ATTRIBUTES* ObjectAttributes)
+ExpWinStaObjectOpen(OB_OPEN_REASON Reason,
+ PVOID ObjectBody,
+ PEPROCESS Process,
+ ULONG HandleCount,
+ ACCESS_MASK GrantedAccess)
{
/* Call the Registered Callback */
- return ExpWindowStationObjectCreate(ObjectBody,
- Parent,
- RemainingPath,
- ObjectAttributes);
+ return ExpWindowStationObjectOpen(Reason,
+ ObjectBody,
+ Process,
+ HandleCount,
+ GrantedAccess);
}
VOID
@@ -101,9 +103,9 @@
NTSTATUS
STDCALL
ExpDesktopCreate(PVOID ObjectBody,
- PVOID Parent,
- PWSTR RemainingPath,
- struct _OBJECT_ATTRIBUTES* ObjectAttributes)
+ PVOID Parent,
+ PWSTR RemainingPath,
+ struct _OBJECT_ATTRIBUTES* ObjectAttributes)
{
/* Call the Registered Callback */
return ExpDesktopObjectCreate(ObjectBody,
@@ -135,15 +137,13 @@
ExWindowStationObjectType->NonpagedPoolCharge =
sizeof(WINSTATION_OBJECT);
ExWindowStationObjectType->Mapping = &ExpWindowStationMapping;
ExWindowStationObjectType->Dump = NULL;
- ExWindowStationObjectType->Open = NULL;
+ ExWindowStationObjectType->Open = ExpWinStaObjectOpen;
ExWindowStationObjectType->Close = NULL;
ExWindowStationObjectType->Delete = ExpWinStaObjectDelete;
ExWindowStationObjectType->Parse = ExpWinStaObjectParse;
ExWindowStationObjectType->Security = NULL;
ExWindowStationObjectType->QueryName = NULL;
ExWindowStationObjectType->OkayToClose = NULL;
- ExWindowStationObjectType->Create = ExpWinStaObjectCreate;
- ExWindowStationObjectType->DuplicationNotify = NULL;
RtlInitUnicodeString(&ExWindowStationObjectType->TypeName,
L"WindowStation");
ObpCreateTypeObject(ExWindowStationObjectType);
@@ -165,8 +165,7 @@
ExDesktopObjectType->Security = NULL;
ExDesktopObjectType->QueryName = NULL;
ExDesktopObjectType->OkayToClose = NULL;
- ExDesktopObjectType->Create = ExpDesktopCreate;
- ExDesktopObjectType->DuplicationNotify = NULL;
+
RtlInitUnicodeString(&ExDesktopObjectType->TypeName, L"Desktop");
ObpCreateTypeObject(ExDesktopObjectType);
}
_____
Modified: trunk/reactos/ntoskrnl/include/internal/ob.h
--- trunk/reactos/ntoskrnl/include/internal/ob.h 2005-05-14
22:55:21 UTC (rev 15292)
+++ trunk/reactos/ntoskrnl/include/internal/ob.h 2005-05-15
04:56:52 UTC (rev 15293)
@@ -16,6 +16,15 @@
struct _EPROCESS;
+typedef enum _OB_OPEN_REASON
+{
+ ObCreateHandle,
+ ObOpenHandle,
+ ObDuplicateHandle,
+ ObInheritHandle,
+ ObMaxOpenReason
+} OB_OPEN_REASON;
+
typedef struct
{
CSHORT Type;
@@ -78,12 +87,6 @@
*/
VOID STDCALL_FUNC (*Dump)(VOID);
- /*
- * PURPOSE: Opens the object
- * NOTE: To be defined
- */
- VOID STDCALL_FUNC (*Open)(VOID);
-
/*
* PURPOSE: Called to close an object if OkayToClose returns true
*/
@@ -136,14 +139,11 @@
*/
VOID STDCALL_FUNC (*OkayToClose)(VOID);
- NTSTATUS STDCALL_FUNC (*Create)(PVOID ObjectBody,
- PVOID Parent,
- PWSTR RemainingPath,
- struct _OBJECT_ATTRIBUTES* ObjectAttributes);
-
- VOID STDCALL_FUNC (*DuplicationNotify)(PEPROCESS DuplicateTo,
- PEPROCESS DuplicateFrom,
- PVOID Object);
+ NTSTATUS STDCALL_FUNC (*Open)(OB_OPEN_REASON Reason,
+ PVOID ObjectBody,
+ PEPROCESS Process,
+ ULONG HandleCount,
+ ACCESS_MASK GrantedAccess);
} OBJECT_TYPE;
@@ -259,7 +259,7 @@
ObInitSymbolicLinkImplementation(VOID);
-NTSTATUS ObCreateHandle(struct _EPROCESS* Process,
+NTSTATUS ObpCreateHandle(struct _EPROCESS* Process,
PVOID ObjectBody,
ACCESS_MASK GrantedAccess,
BOOLEAN Inherit,
_____
Modified: trunk/reactos/ntoskrnl/io/driver.c
--- trunk/reactos/ntoskrnl/io/driver.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/io/driver.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -80,13 +80,6 @@
/* DECLARATIONS
***************************************************************/
-NTSTATUS STDCALL
-IopCreateDriver(
- PVOID ObjectBody,
- PVOID Parent,
- PWSTR RemainingPath,
- POBJECT_ATTRIBUTES ObjectAttributes);
-
VOID STDCALL
IopDeleteDriver(PVOID ObjectBody);
@@ -112,8 +105,6 @@
IoDriverObjectType->Security = NULL;
IoDriverObjectType->QueryName = NULL;
IoDriverObjectType->OkayToClose = NULL;
- IoDriverObjectType->Create = IopCreateDriver;
- IoDriverObjectType->DuplicationNotify = NULL;
RtlInitUnicodeString(&IoDriverObjectType->TypeName, L"Driver");
ObpCreateTypeObject(IoDriverObjectType);
@@ -138,46 +129,6 @@
return STATUS_INVALID_DEVICE_REQUEST;
}
-NTSTATUS STDCALL
-IopCreateDriver(
- PVOID ObjectBody,
- PVOID Parent,
- PWSTR RemainingPath,
- POBJECT_ATTRIBUTES ObjectAttributes)
-{
- PDRIVER_OBJECT Object = ObjectBody;
- ULONG i;
-
- DPRINT("IopCreateDriver(ObjectBody %x, Parent %x, RemainingPath
%S)\n",
- ObjectBody, Parent, RemainingPath);
-
- if (RemainingPath != NULL && wcschr(RemainingPath + 1, '\\') !=
NULL)
- return STATUS_UNSUCCESSFUL;
-
- /* Create driver extension */
- Object->DriverExtension = (PDRIVER_EXTENSION)
- ExAllocatePoolWithTag(
- NonPagedPool,
- sizeof(DRIVER_EXTENSION),
- TAG_DRIVER_EXTENSION);
-
- if (Object->DriverExtension == NULL)
- {
- return STATUS_NO_MEMORY;
- }
-
- RtlZeroMemory(Object->DriverExtension, sizeof(DRIVER_EXTENSION));
-
- Object->Type = IO_TYPE_DRIVER;
-
- for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++)
- Object->MajorFunction[i] = IopInvalidDeviceRequest;
-
- Object->HardwareDatabase = &IopHardwareDatabaseKey;
-
- return STATUS_SUCCESS;
-}
-
VOID STDCALL
IopDeleteDriver(PVOID ObjectBody)
{
@@ -217,6 +168,7 @@
UNICODE_STRING DriverName;
OBJECT_ATTRIBUTES ObjectAttributes;
NTSTATUS Status;
+ ULONG i;
PWSTR Buffer = NULL;
DPRINT("IopCreateDriverObject(%p '%wZ' %x %p %x)\n",
@@ -269,7 +221,28 @@
{
return Status;
}
+
+ /* Create driver extension */
+ Object->DriverExtension = (PDRIVER_EXTENSION)
+ ExAllocatePoolWithTag(
+ NonPagedPool,
+ sizeof(DRIVER_EXTENSION),
+ TAG_DRIVER_EXTENSION);
+ if (Object->DriverExtension == NULL)
+ {
+ return STATUS_NO_MEMORY;
+ }
+
+ RtlZeroMemory(Object->DriverExtension, sizeof(DRIVER_EXTENSION));
+
+ Object->Type = IO_TYPE_DRIVER;
+
+ for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++)
+ Object->MajorFunction[i] = IopInvalidDeviceRequest;
+
+ Object->HardwareDatabase = &IopHardwareDatabaseKey;
+
Object->DriverStart = DriverImageStart;
Object->DriverSize = DriverImageSize;
if (Buffer)
_____
Modified: trunk/reactos/ntoskrnl/io/iocomp.c
--- trunk/reactos/ntoskrnl/io/iocomp.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/io/iocomp.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -222,8 +222,6 @@
ExIoCompletionType->Security = NULL;
ExIoCompletionType->QueryName = NULL;
ExIoCompletionType->OkayToClose = NULL;
- ExIoCompletionType->Create = NULL;
- ExIoCompletionType->DuplicationNotify = NULL;
}
NTSTATUS
_____
Modified: trunk/reactos/ntoskrnl/io/iomgr.c
--- trunk/reactos/ntoskrnl/io/iomgr.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/io/iomgr.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -51,7 +51,7 @@
NPAGED_LOOKASIDE_LIST IoSmallIrpLookaside;
/* INIT FUNCTIONS
************************************************************/
-
+
VOID
INIT_FUNCTION
IoInitCancelHandling(VOID)
@@ -217,8 +217,6 @@
IoDeviceObjectType->Security = NULL;
IoDeviceObjectType->QueryName = NULL;
IoDeviceObjectType->OkayToClose = NULL;
- IoDeviceObjectType->Create = NULL;
- IoDeviceObjectType->DuplicationNotify = NULL;
RtlInitUnicodeString(&IoDeviceObjectType->TypeName, L"Device");
@@ -246,8 +244,6 @@
IoFileObjectType->Security = IopSecurityFile;
IoFileObjectType->QueryName = IopQueryNameFile;
IoFileObjectType->OkayToClose = NULL;
- IoFileObjectType->Create = IopCreateFile;
- IoFileObjectType->DuplicationNotify = NULL;
RtlInitUnicodeString(&IoFileObjectType->TypeName, L"File");
_____
Modified: trunk/reactos/ntoskrnl/ldr/init.c
--- trunk/reactos/ntoskrnl/ldr/init.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/ldr/init.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -89,7 +89,7 @@
L"\\SystemRoot\\system32\\smss.exe");
- Status = ObCreateHandle(
+ Status = ObpCreateHandle(
PsGetCurrentProcess(),
PsInitialSystemProcess,
PROCESS_CREATE_PROCESS | PROCESS_CREATE_THREAD |
PROCESS_QUERY_INFORMATION,
_____
Modified: trunk/reactos/ntoskrnl/lpc/create.c
--- trunk/reactos/ntoskrnl/lpc/create.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/lpc/create.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -62,38 +62,7 @@
return (STATUS_SUCCESS);
}
-
/**********************************************************************
- * NAME
- * NiCreatePort/4
- *
- * DESCRIPTION
- *
- * ARGUMENTS
- *
- * RETURN VALUE
- */
-NTSTATUS STDCALL
-NiCreatePort (PVOID ObjectBody,
- PVOID Parent,
- PWSTR RemainingPath,
- POBJECT_ATTRIBUTES ObjectAttributes)
-{
- if (RemainingPath == NULL)
- {
- return (STATUS_SUCCESS);
- }
-
- if (wcschr(RemainingPath+1, '\\') != NULL)
- {
- return (STATUS_UNSUCCESSFUL);
- }
-
- return (STATUS_SUCCESS);
-}
-
-
-/**********************************************************************
* NAME EXPORTED
* NtCreatePort/5
*
_____
Modified: trunk/reactos/ntoskrnl/lpc/port.c
--- trunk/reactos/ntoskrnl/lpc/port.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/lpc/port.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -54,9 +54,8 @@
LpcPortObjectType->Parse = NULL;
LpcPortObjectType->Security = NULL;
LpcPortObjectType->QueryName = NULL;
+ LpcPortObjectType->Open = NULL;
LpcPortObjectType->OkayToClose = NULL;
- LpcPortObjectType->Create = NiCreatePort;
- LpcPortObjectType->DuplicationNotify = NULL;
ObpCreateTypeObject(LpcPortObjectType);
_____
Modified: trunk/reactos/ntoskrnl/mm/section.c
--- trunk/reactos/ntoskrnl/mm/section.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/mm/section.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -2068,27 +2068,6 @@
ObjectBody, HandleCount,
ObGetObjectPointerCount(ObjectBody));
}
-NTSTATUS STDCALL
-MmpCreateSection(PVOID ObjectBody,
- PVOID Parent,
- PWSTR RemainingPath,
- POBJECT_ATTRIBUTES ObjectAttributes)
-{
- DPRINT("MmpCreateSection(ObjectBody %x, Parent %x, RemainingPath
%S)\n",
- ObjectBody, Parent, RemainingPath);
-
- if (RemainingPath == NULL)
- {
- return(STATUS_SUCCESS);
- }
-
- if (wcschr(RemainingPath+1, L'\\') != NULL)
- {
- return(STATUS_UNSUCCESSFUL);
- }
- return(STATUS_SUCCESS);
-}
-
NTSTATUS INIT_FUNCTION
MmCreatePhysicalMemorySection(VOID)
{
@@ -2145,11 +2124,10 @@
MmSectionObjectType->Close = MmpCloseSection;
MmSectionObjectType->Delete = MmpDeleteSection;
MmSectionObjectType->Parse = NULL;
+ MmSectionObjectType->Open = NULL;
MmSectionObjectType->Security = NULL;
MmSectionObjectType->QueryName = NULL;
MmSectionObjectType->OkayToClose = NULL;
- MmSectionObjectType->Create = MmpCreateSection;
- MmSectionObjectType->DuplicationNotify = NULL;
/*
* NOTE: Do not register the section object type here because
_____
Modified: trunk/reactos/ntoskrnl/ob/dirobj.c
--- trunk/reactos/ntoskrnl/ob/dirobj.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/ob/dirobj.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -475,6 +475,7 @@
0,
0,
(PVOID*)&Directory);
+
if(NT_SUCCESS(Status))
{
Status = ObInsertObject((PVOID)Directory,
_____
Modified: trunk/reactos/ntoskrnl/ob/handle.c
--- trunk/reactos/ntoskrnl/ob/handle.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/ob/handle.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -459,11 +459,11 @@
ObjectType->Mapping);
}
}
- Status = ObCreateHandle(TargetProcess,
- ObjectBody,
- DesiredAccess,
- InheritHandle,
- &hTarget);
+ Status = ObpCreateHandle(TargetProcess,
+ ObjectBody,
+ DesiredAccess,
+ InheritHandle,
+ &hTarget);
ObDereferenceObject(ObjectBody);
@@ -586,7 +586,7 @@
NTSTATUS
-ObCreateHandle(PEPROCESS Process,
+ObpCreateHandle(PEPROCESS Process,
PVOID ObjectBody,
ACCESS_MASK GrantedAccess,
BOOLEAN Inherit,
@@ -605,7 +605,7 @@
PAGED_CODE();
- DPRINT("ObCreateHandle(Process %x, obj %x)\n",Process,ObjectBody);
+ DPRINT("ObpCreateHandle(Process %x, obj %x)\n",Process,ObjectBody);
ASSERT(Process);
ASSERT(ObjectBody);
@@ -941,7 +941,7 @@
Access = DesiredAccess;
ObjectHeader = BODY_TO_HEADER(Object);
- return(ObCreateHandle(PsGetCurrentProcess(),
+ return(ObpCreateHandle(PsGetCurrentProcess(),
Object,
Access,
ObjectHeader->Inherit,
_____
Modified: trunk/reactos/ntoskrnl/ob/namespc.c
--- trunk/reactos/ntoskrnl/ob/namespc.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/ob/namespc.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -159,7 +159,7 @@
return Status;
}
- Status = ObCreateHandle(PsGetCurrentProcess(),
+ Status = ObpCreateHandle(PsGetCurrentProcess(),
Object,
DesiredAccess,
FALSE,
@@ -238,6 +238,24 @@
KeReleaseSpinLock(&(Header->Parent->Lock),oldlvl);
}
+NTSTATUS
+STDCALL
+ObpCreateDirectory(OB_OPEN_REASON Reason,
+ PVOID ObjectBody,
+ PEPROCESS Process,
+ ULONG HandleCount,
+ ACCESS_MASK GrantedAccess)
+{
+ PDIRECTORY_OBJECT Directory = ObjectBody;
+
+ if (Reason == ObCreateHandle)
+ {
+ InitializeListHead(&Directory->head);
+ KeInitializeSpinLock(&Directory->Lock);
+ }
+
+ return STATUS_SUCCESS;
+}
PVOID
ObpFindEntryDirectory(PDIRECTORY_OBJECT DirectoryObject,
@@ -350,29 +368,6 @@
}
-NTSTATUS STDCALL
-ObpCreateDirectory(PVOID ObjectBody,
- PVOID Parent,
- PWSTR RemainingPath,
- POBJECT_ATTRIBUTES ObjectAttributes)
-{
- PDIRECTORY_OBJECT DirectoryObject = (PDIRECTORY_OBJECT)ObjectBody;
-
- DPRINT("ObpCreateDirectory(ObjectBody %x, Parent %x, RemainingPath
%S)\n",
- ObjectBody, Parent, RemainingPath);
-
- if (RemainingPath != NULL && wcschr(RemainingPath+1, '\\') != NULL)
- {
- return(STATUS_UNSUCCESSFUL);
- }
-
- InitializeListHead(&DirectoryObject->head);
- KeInitializeSpinLock(&DirectoryObject->Lock);
-
- return(STATUS_SUCCESS);
-}
-
-
VOID INIT_FUNCTION
ObInit(VOID)
/*
@@ -405,8 +400,7 @@
ObDirectoryType->Security = NULL;
ObDirectoryType->QueryName = NULL;
ObDirectoryType->OkayToClose = NULL;
- ObDirectoryType->Create = ObpCreateDirectory;
- ObDirectoryType->DuplicationNotify = NULL;
+ ObDirectoryType->Open = ObpCreateDirectory;
RtlInitUnicodeString(&ObDirectoryType->TypeName,
L"Directory");
@@ -430,8 +424,6 @@
ObTypeObjectType->Security = NULL;
ObTypeObjectType->QueryName = NULL;
ObTypeObjectType->OkayToClose = NULL;
- ObTypeObjectType->Create = NULL;
- ObTypeObjectType->DuplicationNotify = NULL;
RtlInitUnicodeString(&ObTypeObjectType->TypeName,
L"ObjectType");
_____
Modified: trunk/reactos/ntoskrnl/ob/object.c
--- trunk/reactos/ntoskrnl/ob/object.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/ob/object.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -22,7 +22,13 @@
POBJECT_HEADER ObjectHeader;
} RETENTION_CHECK_PARAMS, *PRETENTION_CHECK_PARAMS;
-
+/* TEMPORARY HACK. DO NOT REMOVE -- Alex */
+NTSTATUS
+STDCALL
+ExpDesktopCreate(PVOID ObjectBody,
+ PVOID Parent,
+ PWSTR RemainingPath,
+ struct _OBJECT_ATTRIBUTES* ObjectAttributes);
/* FUNCTIONS
************************************************************/
NTSTATUS
@@ -733,6 +739,7 @@
RtlInitUnicodeString(&RemainingPath, NULL);
}
+ DPRINT("Allocating memory\n");
Header = (POBJECT_HEADER)ExAllocatePoolWithTag(NonPagedPool,
OBJECT_ALLOC_SIZE(ObjectSize),
Type->Tag);
@@ -786,14 +793,39 @@
ObjectAttached = TRUE;
}
- DPRINT("About to call Create Routine\n");
- if (Header->ObjectType->Create != NULL)
- {
- DPRINT("Calling %x\n", Header->ObjectType->Create);
- Status = Header->ObjectType->Create(HEADER_TO_BODY(Header),
- Parent,
- RemainingPath.Buffer,
- ObjectAttributes);
+ if ((Header->ObjectType == IoFileObjectType) ||
+ (Header->ObjectType == ExDesktopObjectType) ||
+ (Header->ObjectType->Open != NULL))
+ {
+ DPRINT("About to call Open Routine\n");
+ if (Header->ObjectType == IoFileObjectType)
+ {
+ /* TEMPORARY HACK. DO NOT TOUCH -- Alex */
+ DPRINT("Calling IopCreateFile\n");
+ Status = IopCreateFile(HEADER_TO_BODY(Header),
+ Parent,
+ RemainingPath.Buffer,
+ ObjectAttributes);
+ }
+ else if (Header->ObjectType == ExDesktopObjectType)
+ {
+ /* TEMPORARY HACK. DO NOT TOUCH -- Alex */
+ DPRINT("Calling ExpDesktopCreate\n");
+ Status = ExpDesktopCreate(HEADER_TO_BODY(Header),
+ Parent,
+ RemainingPath.Buffer,
+ ObjectAttributes);
+ }
+ else if (Header->ObjectType->Open != NULL)
+ {
+ DPRINT("Calling %x\n", Header->ObjectType->Open);
+ Status = Header->ObjectType->Open(ObCreateHandle,
+ HEADER_TO_BODY(Header),
+ NULL,
+ 0,
+ 0);
+ }
+
if (!NT_SUCCESS(Status))
{
if (ObjectAttached == TRUE)
@@ -810,7 +842,8 @@
DPRINT("Create Failed\n");
return Status;
}
- }
+ }
+
RtlFreeUnicodeString(&RemainingPath);
SeCaptureSubjectContext(&SubjectContext);
@@ -960,7 +993,7 @@
return Status;
}
- Status = ObCreateHandle(PsGetCurrentProcess(),
+ Status = ObpCreateHandle(PsGetCurrentProcess(),
Object,
DesiredAccess,
(BOOLEAN)(HandleAttributes & OBJ_INHERIT),
_____
Modified: trunk/reactos/ntoskrnl/ob/symlink.c
--- trunk/reactos/ntoskrnl/ob/symlink.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/ob/symlink.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -33,29 +33,6 @@
/**********************************************************************
* NAME INTERNAL
- * ObpCreateSymbolicLink
- *
- * DESCRIPTION
- *
- * ARGUMENTS
- *
- * RETURNN VALUE
- * Status.
- *
- * REVISIONS
- */
-NTSTATUS STDCALL
-ObpCreateSymbolicLink(PVOID Object,
- PVOID Parent,
- PWSTR RemainingPath,
- POBJECT_ATTRIBUTES ObjectAttributes)
-{
- return(STATUS_SUCCESS);
-}
-
-
-/**********************************************************************
- * NAME INTERNAL
* ObpDeleteSymbolicLink
*
* DESCRIPTION
@@ -175,10 +152,9 @@
ObSymbolicLinkType->Delete = ObpDeleteSymbolicLink;
ObSymbolicLinkType->Parse = ObpParseSymbolicLink;
ObSymbolicLinkType->Security = NULL;
+ ObSymbolicLinkType->Open = NULL;
ObSymbolicLinkType->QueryName = NULL;
ObSymbolicLinkType->OkayToClose = NULL;
- ObSymbolicLinkType->Create = ObpCreateSymbolicLink;
- ObSymbolicLinkType->DuplicationNotify = NULL;
RtlInitUnicodeString(&ObSymbolicLinkType->TypeName,
L"SymbolicLink");
_____
Modified: trunk/reactos/ntoskrnl/ps/job.c
--- trunk/reactos/ntoskrnl/ps/job.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/ps/job.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -78,8 +78,7 @@
PsJobType->Security = NULL;
PsJobType->QueryName = NULL;
PsJobType->OkayToClose = NULL;
- PsJobType->Create = NULL;
- PsJobType->DuplicationNotify = NULL;
+ PsJobType->Open = NULL;
RtlInitUnicodeString(&PsJobType->TypeName, L"Job");
_____
Modified: trunk/reactos/ntoskrnl/ps/psmgr.c
--- trunk/reactos/ntoskrnl/ps/psmgr.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/ps/psmgr.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -97,8 +97,7 @@
PsThreadType->Security = NULL;
PsThreadType->QueryName = NULL;
PsThreadType->OkayToClose = NULL;
- PsThreadType->Create = NULL;
- PsThreadType->DuplicationNotify = NULL;
+ PsThreadType->Open = NULL;
RtlInitUnicodeString(&PsThreadType->TypeName, L"Thread");
@@ -149,8 +148,7 @@
PsProcessType->Security = NULL;
PsProcessType->QueryName = NULL;
PsProcessType->OkayToClose = NULL;
- PsProcessType->Create = NULL;
- PsProcessType->DuplicationNotify = NULL;
+ PsProcessType->Open = NULL;
RtlInitUnicodeString(&PsProcessType->TypeName, L"Process");
_____
Modified: trunk/reactos/ntoskrnl/ps/security.c
--- trunk/reactos/ntoskrnl/ps/security.c 2005-05-14 22:55:21 UTC
(rev 15292)
+++ trunk/reactos/ntoskrnl/ps/security.c 2005-05-15 04:56:52 UTC
(rev 15293)
@@ -99,7 +99,7 @@
&Token);
if(NT_SUCCESS(Status))
{
- Status = ObCreateHandle(PsGetCurrentProcess(),
+ Status = ObpCreateHandle(PsGetCurrentProcess(),
Token,
DesiredAccess,
FALSE,
_____
Modified: trunk/reactos/ntoskrnl/ps/win32.c
--- trunk/reactos/ntoskrnl/ps/win32.c 2005-05-14 22:55:21 UTC (rev
15292)
+++ trunk/reactos/ntoskrnl/ps/win32.c 2005-05-15 04:56:52 UTC (rev
15293)
@@ -21,7 +21,7 @@
static ULONG PspWin32ProcessSize = 0;
static ULONG PspWin32ThreadSize = 0;
-extern OBJECT_CREATE_ROUTINE ExpWindowStationObjectCreate;
+extern OBJECT_OPEN_ROUTINE ExpWindowStationObjectOpen;
extern OBJECT_PARSE_ROUTINE ExpWindowStationObjectParse;
extern OBJECT_DELETE_ROUTINE ExpWindowStationObjectDelete;
extern OBJECT_FIND_ROUTINE ExpWindowStationObjectFind;
@@ -92,7 +92,7 @@
[truncated at 1000 lines; 230 more skipped]