From 91fc5d180434da12cc8b50cf8df7c8eb12d122ed Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Mon, 3 Jan 2005 05:17:16 +0000 Subject: [PATCH] Fix incorrect LPC Object export...we export pointers not the object itself! Also remove more TIME stuff to be properly compatible with real structures. svn path=/trunk/; revision=12748 --- reactos/include/napi/dbg.h | 2 +- reactos/include/ntos/zwtypes.h | 20 +++++------ reactos/ntoskrnl/include/internal/port.h | 4 +-- reactos/ntoskrnl/include/internal/ps.h | 12 +++---- reactos/ntoskrnl/lpc/complete.c | 2 +- reactos/ntoskrnl/lpc/connect.c | 8 ++--- reactos/ntoskrnl/lpc/create.c | 2 +- reactos/ntoskrnl/lpc/port.c | 46 ++++++++++++------------ reactos/ntoskrnl/lpc/query.c | 2 +- reactos/ntoskrnl/lpc/reply.c | 4 +-- reactos/ntoskrnl/lpc/send.c | 6 ++-- reactos/ntoskrnl/ps/kill.c | 2 +- reactos/ntoskrnl/ps/process.c | 4 +-- reactos/ntoskrnl/ps/tinfo.c | 4 +-- 14 files changed, 58 insertions(+), 60 deletions(-) diff --git a/reactos/include/napi/dbg.h b/reactos/include/napi/dbg.h index d273e607f0a..2b0eccfd8c6 100644 --- a/reactos/include/napi/dbg.h +++ b/reactos/include/napi/dbg.h @@ -62,7 +62,7 @@ typedef struct _LPC_DBG_MESSAGE typedef struct _LPC_TERMINATION_MESSAGE { LPC_MESSAGE Header; - TIME CreationTime; + LARGE_INTEGER CreationTime; } LPC_TERMINATION_MESSAGE, *PLPC_TERMINATION_MESSAGE; #endif /* __INCLUDE_NAPI_DBG_H */ diff --git a/reactos/include/ntos/zwtypes.h b/reactos/include/ntos/zwtypes.h index 4799f59abe6..b2e879ff86e 100755 --- a/reactos/include/ntos/zwtypes.h +++ b/reactos/include/ntos/zwtypes.h @@ -729,10 +729,10 @@ typedef struct _VM_COUNTERS_ // Information class 4 typedef struct _KERNEL_USER_TIMES { - TIME CreateTime; - TIME ExitTime; - TIME KernelTime; - TIME UserTime; + LARGE_INTEGER CreateTime; + LARGE_INTEGER ExitTime; + LARGE_INTEGER KernelTime; + LARGE_INTEGER UserTime; } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES; // Information class 9 @@ -1324,9 +1324,9 @@ typedef struct _SYSTEM_PROCESSES_NT4 SIZE_T NextEntryDelta; ULONG ThreadCount; ULONG Reserved1[6]; - TIME CreateTime; - TIME UserTime; - TIME KernelTime; + LARGE_INTEGER CreateTime; + LARGE_INTEGER UserTime; + LARGE_INTEGER KernelTime; UNICODE_STRING ProcessName; KPRIORITY BasePriority; ULONG ProcessId; @@ -1342,9 +1342,9 @@ typedef struct _SYSTEM_PROCESSES_NT5 SIZE_T NextEntryDelta; ULONG ThreadCount; ULONG Reserved1[6]; - TIME CreateTime; - TIME UserTime; - TIME KernelTime; + LARGE_INTEGER CreateTime; + LARGE_INTEGER UserTime; + LARGE_INTEGER KernelTime; UNICODE_STRING ProcessName; KPRIORITY BasePriority; ULONG ProcessId; diff --git a/reactos/ntoskrnl/include/internal/port.h b/reactos/ntoskrnl/include/internal/port.h index fada5b8365b..2bbb317e3af 100644 --- a/reactos/ntoskrnl/include/internal/port.h +++ b/reactos/ntoskrnl/include/internal/port.h @@ -65,7 +65,7 @@ LpcRequestPort (PEPORT Port, NTSTATUS STDCALL LpcSendTerminationPort (PEPORT Port, - TIME CreationTime); + LARGE_INTEGER CreationTime); /* EPORT.Type */ @@ -140,7 +140,7 @@ NiInitializePort (IN OUT PEPORT Port, NTSTATUS NiInitPort (VOID); -extern OBJECT_TYPE LpcPortObjectType; +extern POBJECT_TYPE LpcPortObjectType; extern ULONG LpcpNextMessageId; extern FAST_MUTEX LpcpLock; diff --git a/reactos/ntoskrnl/include/internal/ps.h b/reactos/ntoskrnl/include/internal/ps.h index caab4b45d44..362b0faaf4b 100644 --- a/reactos/ntoskrnl/include/internal/ps.h +++ b/reactos/ntoskrnl/include/internal/ps.h @@ -160,11 +160,11 @@ typedef struct _ETHREAD { KTHREAD Tcb; union { - TIME CreateTime; + LARGE_INTEGER CreateTime; UCHAR NestedFaultCount:2; UCHAR ApcNeeded:1; }; - TIME ExitTime; + LARGE_INTEGER ExitTime; LIST_ENTRY LpcReplyChain; NTSTATUS ExitStatus; PVOID OfsChain; @@ -316,14 +316,10 @@ struct _EPROCESS ULONG LockCount; /* 07C */ /* Time of process creation. */ -#ifdef __USE_W32API - LARGE_INTEGER CreateTime; /* 080 */ -#else - TIME CreateTime; /* 080 */ -#endif + LARGE_INTEGER CreateTime; /* 080 */ /* Time of process exit. */ - TIME ExitTime; /* 088 */ + LARGE_INTEGER ExitTime; /* 088 */ /* Unknown. */ PKTHREAD LockOwner; /* 090 */ /* Process id. */ diff --git a/reactos/ntoskrnl/lpc/complete.c b/reactos/ntoskrnl/lpc/complete.c index 3b7f67a020d..9b7b66fd3de 100644 --- a/reactos/ntoskrnl/lpc/complete.c +++ b/reactos/ntoskrnl/lpc/complete.c @@ -46,7 +46,7 @@ NtCompleteConnectPort (HANDLE hServerSideCommPort) */ Status = ObReferenceObjectByHandle (hServerSideCommPort, PORT_ALL_ACCESS, - & LpcPortObjectType, + LpcPortObjectType, UserMode, (PVOID*)&ReplyPort, NULL); diff --git a/reactos/ntoskrnl/lpc/connect.c b/reactos/ntoskrnl/lpc/connect.c index 4df287118c4..982ecbe695f 100644 --- a/reactos/ntoskrnl/lpc/connect.c +++ b/reactos/ntoskrnl/lpc/connect.c @@ -66,7 +66,7 @@ EiConnectPort(IN PEPORT* ConnectedPort, * Create a port to represent our side of the connection */ Status = ObCreateObject (KernelMode, - & LpcPortObjectType, + LpcPortObjectType, NULL, KernelMode, NULL, @@ -333,7 +333,7 @@ NtConnectPort (PHANDLE UnsafeConnectedPortHandle, 0, NULL, PORT_ALL_ACCESS, /* DesiredAccess */ - & LpcPortObjectType, + LpcPortObjectType, UserMode, NULL, (PVOID*)&NamedPort); @@ -547,7 +547,7 @@ NtAcceptConnectPort (PHANDLE ServerPortHandle, Status = ObReferenceObjectByHandle(NamedPortHandle, PORT_ALL_ACCESS, - & LpcPortObjectType, + LpcPortObjectType, UserMode, (PVOID*)&NamedPort, NULL); @@ -563,7 +563,7 @@ NtAcceptConnectPort (PHANDLE ServerPortHandle, if (AcceptIt) { Status = ObCreateObject(ExGetPreviousMode(), - & LpcPortObjectType, + LpcPortObjectType, NULL, ExGetPreviousMode(), NULL, diff --git a/reactos/ntoskrnl/lpc/create.c b/reactos/ntoskrnl/lpc/create.c index e24ed62e53d..2b9260e7f46 100644 --- a/reactos/ntoskrnl/lpc/create.c +++ b/reactos/ntoskrnl/lpc/create.c @@ -134,7 +134,7 @@ NtCreatePort (PHANDLE PortHandle, /* Ask Ob to create the object */ Status = ObCreateObject (ExGetPreviousMode(), - & LpcPortObjectType, + LpcPortObjectType, ObjectAttributes, ExGetPreviousMode(), NULL, diff --git a/reactos/ntoskrnl/lpc/port.c b/reactos/ntoskrnl/lpc/port.c index b21e6f994e1..7ad11d209ec 100644 --- a/reactos/ntoskrnl/lpc/port.c +++ b/reactos/ntoskrnl/lpc/port.c @@ -21,7 +21,7 @@ /* GLOBALS *******************************************************************/ -OBJECT_TYPE LpcPortObjectType = {0, }; +POBJECT_TYPE LpcPortObjectType = 0; ULONG LpcpNextMessageId = 0; /* 0 is not a valid ID */ FAST_MUTEX LpcpLock; /* global internal sync in LPC facility */ @@ -37,30 +37,32 @@ static GENERIC_MAPPING ExpPortMapping = { NTSTATUS INIT_FUNCTION NiInitPort (VOID) { - RtlZeroMemory (& LpcPortObjectType, sizeof (OBJECT_TYPE)); + /* Allocate Memory for the LPC Object */ + LpcPortObjectType = ExAllocatePool(NonPagedPool, sizeof(OBJECT_TYPE)); + RtlZeroMemory (LpcPortObjectType, sizeof (OBJECT_TYPE)); - RtlRosInitUnicodeStringFromLiteral(&LpcPortObjectType.TypeName,L"Port"); + RtlRosInitUnicodeStringFromLiteral(&LpcPortObjectType->TypeName,L"Port"); - LpcPortObjectType.Tag = TAG('L', 'P', 'R', 'T'); - LpcPortObjectType.MaxObjects = ULONG_MAX; - LpcPortObjectType.MaxHandles = ULONG_MAX; - LpcPortObjectType.TotalObjects = 0; - LpcPortObjectType.TotalHandles = 0; - LpcPortObjectType.PagedPoolCharge = 0; - LpcPortObjectType.NonpagedPoolCharge = sizeof(EPORT); - LpcPortObjectType.Mapping = &ExpPortMapping; - LpcPortObjectType.Dump = NULL; - LpcPortObjectType.Open = NULL; - LpcPortObjectType.Close = NiClosePort; - LpcPortObjectType.Delete = NiDeletePort; - LpcPortObjectType.Parse = NULL; - LpcPortObjectType.Security = NULL; - LpcPortObjectType.QueryName = NULL; - LpcPortObjectType.OkayToClose = NULL; - LpcPortObjectType.Create = NiCreatePort; - LpcPortObjectType.DuplicationNotify = NULL; + LpcPortObjectType->Tag = TAG('L', 'P', 'R', 'T'); + LpcPortObjectType->MaxObjects = ULONG_MAX; + LpcPortObjectType->MaxHandles = ULONG_MAX; + LpcPortObjectType->TotalObjects = 0; + LpcPortObjectType->TotalHandles = 0; + LpcPortObjectType->PagedPoolCharge = 0; + LpcPortObjectType->NonpagedPoolCharge = sizeof(EPORT); + LpcPortObjectType->Mapping = &ExpPortMapping; + LpcPortObjectType->Dump = NULL; + LpcPortObjectType->Open = NULL; + LpcPortObjectType->Close = NiClosePort; + LpcPortObjectType->Delete = NiDeletePort; + LpcPortObjectType->Parse = NULL; + LpcPortObjectType->Security = NULL; + LpcPortObjectType->QueryName = NULL; + LpcPortObjectType->OkayToClose = NULL; + LpcPortObjectType->Create = NiCreatePort; + LpcPortObjectType->DuplicationNotify = NULL; - ObpCreateTypeObject(& LpcPortObjectType); + ObpCreateTypeObject(LpcPortObjectType); LpcpNextMessageId = 0; diff --git a/reactos/ntoskrnl/lpc/query.c b/reactos/ntoskrnl/lpc/query.c index 456acd3300d..d9bb6187fc8 100644 --- a/reactos/ntoskrnl/lpc/query.c +++ b/reactos/ntoskrnl/lpc/query.c @@ -50,7 +50,7 @@ NtQueryInformationPort (IN HANDLE PortHandle, Status = ObReferenceObjectByHandle (PortHandle, PORT_ALL_ACCESS, /* AccessRequired */ - & LpcPortObjectType, + LpcPortObjectType, UserMode, (PVOID *) & Port, NULL); diff --git a/reactos/ntoskrnl/lpc/reply.c b/reactos/ntoskrnl/lpc/reply.c index c66312a478a..2a1add8d0e5 100644 --- a/reactos/ntoskrnl/lpc/reply.c +++ b/reactos/ntoskrnl/lpc/reply.c @@ -88,7 +88,7 @@ NtReplyPort (IN HANDLE PortHandle, Status = ObReferenceObjectByHandle(PortHandle, PORT_ALL_ACCESS, /* AccessRequired */ - & LpcPortObjectType, + LpcPortObjectType, UserMode, (PVOID*)&Port, NULL); @@ -154,7 +154,7 @@ NtReplyWaitReceivePortEx(IN HANDLE PortHandle, Status = ObReferenceObjectByHandle(PortHandle, PORT_ALL_ACCESS, - & LpcPortObjectType, + LpcPortObjectType, UserMode, (PVOID*)&Port, NULL); diff --git a/reactos/ntoskrnl/lpc/send.c b/reactos/ntoskrnl/lpc/send.c index bb89dbcbc12..a9914d7ac3f 100644 --- a/reactos/ntoskrnl/lpc/send.c +++ b/reactos/ntoskrnl/lpc/send.c @@ -30,7 +30,7 @@ */ NTSTATUS STDCALL LpcSendTerminationPort (IN PEPORT Port, - IN TIME CreationTime) + IN LARGE_INTEGER CreationTime) { NTSTATUS Status; LPC_TERMINATION_MESSAGE Msg; @@ -180,7 +180,7 @@ NTSTATUS STDCALL NtRequestPort (IN HANDLE PortHandle, Status = ObReferenceObjectByHandle(PortHandle, PORT_ALL_ACCESS, - & LpcPortObjectType, + LpcPortObjectType, UserMode, (PVOID*)&Port, NULL); @@ -231,7 +231,7 @@ NtRequestWaitReplyPort (IN HANDLE PortHandle, Status = ObReferenceObjectByHandle(PortHandle, PORT_ALL_ACCESS, - & LpcPortObjectType, + LpcPortObjectType, UserMode, (PVOID*)&Port, NULL); diff --git a/reactos/ntoskrnl/ps/kill.c b/reactos/ntoskrnl/ps/kill.c index 253aa789ce5..a7b70592e4b 100644 --- a/reactos/ntoskrnl/ps/kill.c +++ b/reactos/ntoskrnl/ps/kill.c @@ -448,7 +448,7 @@ NtRegisterThreadTerminatePort(HANDLE PortHandle) Status = ObReferenceObjectByHandle(PortHandle, PORT_ALL_ACCESS, - & LpcPortObjectType, + LpcPortObjectType, KeGetCurrentThread()->PreviousMode, (PVOID*)&TerminationPort, NULL); diff --git a/reactos/ntoskrnl/ps/process.c b/reactos/ntoskrnl/ps/process.c index fff8cf8bdf8..0b7c33d4122 100644 --- a/reactos/ntoskrnl/ps/process.c +++ b/reactos/ntoskrnl/ps/process.c @@ -745,7 +745,7 @@ NtCreateProcess(OUT PHANDLE ProcessHandle, { Status = ObReferenceObjectByHandle(DebugPort, PORT_ALL_ACCESS, - & LpcPortObjectType, + LpcPortObjectType, UserMode, (PVOID*)&pDebugPort, NULL); @@ -767,7 +767,7 @@ NtCreateProcess(OUT PHANDLE ProcessHandle, { Status = ObReferenceObjectByHandle(ExceptionPort, PORT_ALL_ACCESS, - & LpcPortObjectType, + LpcPortObjectType, UserMode, (PVOID*)&pExceptionPort, NULL); diff --git a/reactos/ntoskrnl/ps/tinfo.c b/reactos/ntoskrnl/ps/tinfo.c index 0aae94ae341..f011bef31e9 100644 --- a/reactos/ntoskrnl/ps/tinfo.c +++ b/reactos/ntoskrnl/ps/tinfo.c @@ -253,9 +253,9 @@ NtQueryInformationThread (IN HANDLE ThreadHandle, case ThreadTimes: u.TTI.KernelTime.QuadPart = Thread->Tcb.KernelTime * 100000LL; u.TTI.UserTime.QuadPart = Thread->Tcb.UserTime * 100000LL; - u.TTI.CreateTime = (TIME) Thread->CreateTime; + u.TTI.CreateTime = Thread->CreateTime; /*This works*/ - u.TTI.ExitTime = (TIME) Thread->ExitTime; + u.TTI.ExitTime = Thread->ExitTime; break; case ThreadQuerySetWin32StartAddress: