typedef struct _LPC_TERMINATION_MESSAGE
{
LPC_MESSAGE Header;
- TIME CreationTime;
+ LARGE_INTEGER CreationTime;
} LPC_TERMINATION_MESSAGE, *PLPC_TERMINATION_MESSAGE;
#endif /* __INCLUDE_NAPI_DBG_H */
// 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
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;
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;
NTSTATUS
STDCALL
LpcSendTerminationPort (PEPORT Port,
- TIME CreationTime);
+ LARGE_INTEGER CreationTime);
/* EPORT.Type */
NTSTATUS
NiInitPort (VOID);
-extern OBJECT_TYPE LpcPortObjectType;
+extern POBJECT_TYPE LpcPortObjectType;
extern ULONG LpcpNextMessageId;
extern FAST_MUTEX LpcpLock;
{
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;
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. */
*/
Status = ObReferenceObjectByHandle (hServerSideCommPort,
PORT_ALL_ACCESS,
- & LpcPortObjectType,
+ LpcPortObjectType,
UserMode,
(PVOID*)&ReplyPort,
NULL);
* Create a port to represent our side of the connection
*/
Status = ObCreateObject (KernelMode,
- & LpcPortObjectType,
+ LpcPortObjectType,
NULL,
KernelMode,
NULL,
0,
NULL,
PORT_ALL_ACCESS, /* DesiredAccess */
- & LpcPortObjectType,
+ LpcPortObjectType,
UserMode,
NULL,
(PVOID*)&NamedPort);
Status = ObReferenceObjectByHandle(NamedPortHandle,
PORT_ALL_ACCESS,
- & LpcPortObjectType,
+ LpcPortObjectType,
UserMode,
(PVOID*)&NamedPort,
NULL);
if (AcceptIt)
{
Status = ObCreateObject(ExGetPreviousMode(),
- & LpcPortObjectType,
+ LpcPortObjectType,
NULL,
ExGetPreviousMode(),
NULL,
/* Ask Ob to create the object */
Status = ObCreateObject (ExGetPreviousMode(),
- & LpcPortObjectType,
+ LpcPortObjectType,
ObjectAttributes,
ExGetPreviousMode(),
NULL,
/* 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 */
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;
-
- ObpCreateTypeObject(& LpcPortObjectType);
+ 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);
LpcpNextMessageId = 0;
Status = ObReferenceObjectByHandle (PortHandle,
PORT_ALL_ACCESS, /* AccessRequired */
- & LpcPortObjectType,
+ LpcPortObjectType,
UserMode,
(PVOID *) & Port,
NULL);
Status = ObReferenceObjectByHandle(PortHandle,
PORT_ALL_ACCESS, /* AccessRequired */
- & LpcPortObjectType,
+ LpcPortObjectType,
UserMode,
(PVOID*)&Port,
NULL);
Status = ObReferenceObjectByHandle(PortHandle,
PORT_ALL_ACCESS,
- & LpcPortObjectType,
+ LpcPortObjectType,
UserMode,
(PVOID*)&Port,
NULL);
*/
NTSTATUS STDCALL
LpcSendTerminationPort (IN PEPORT Port,
- IN TIME CreationTime)
+ IN LARGE_INTEGER CreationTime)
{
NTSTATUS Status;
LPC_TERMINATION_MESSAGE Msg;
Status = ObReferenceObjectByHandle(PortHandle,
PORT_ALL_ACCESS,
- & LpcPortObjectType,
+ LpcPortObjectType,
UserMode,
(PVOID*)&Port,
NULL);
Status = ObReferenceObjectByHandle(PortHandle,
PORT_ALL_ACCESS,
- & LpcPortObjectType,
+ LpcPortObjectType,
UserMode,
(PVOID*)&Port,
NULL);
Status = ObReferenceObjectByHandle(PortHandle,
PORT_ALL_ACCESS,
- & LpcPortObjectType,
+ LpcPortObjectType,
KeGetCurrentThread()->PreviousMode,
(PVOID*)&TerminationPort,
NULL);
{
Status = ObReferenceObjectByHandle(DebugPort,
PORT_ALL_ACCESS,
- & LpcPortObjectType,
+ LpcPortObjectType,
UserMode,
(PVOID*)&pDebugPort,
NULL);
{
Status = ObReferenceObjectByHandle(ExceptionPort,
PORT_ALL_ACCESS,
- & LpcPortObjectType,
+ LpcPortObjectType,
UserMode,
(PVOID*)&pExceptionPort,
NULL);
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: