/* Generate a new cookie */
KeQuerySystemTime(&SystemTime);
Prcb = KeGetCurrentPrcb();
- NewCookie = Prcb->MmPageFaultCount ^ Prcb->InterruptTime ^
+ NewCookie = (Prcb->MmPageFaultCount ^ Prcb->InterruptTime ^
SystemTime.u.LowPart ^ SystemTime.u.HighPart ^
- (ULONG_PTR)&SystemTime;
+ (ULONG)(ULONG_PTR)&SystemTime);
/* Set the new cookie*/
InterlockedCompareExchange((LONG*)&SharedUserData->Cookie,
{
/* We couldn't create the CID, dereference the thread and fail */
ObDereferenceObject(Thread);
- ObDereferenceObject(Process);
return STATUS_INSUFFICIENT_RESOURCES;
}
{
/* Fail */
ObDereferenceObject(Thread);
- ObDereferenceObject(Process);
return STATUS_PROCESS_IS_TERMINATING;
}
/* Failed to create the TEB. Release rundown and dereference */
ExReleaseRundownProtection(&Process->RundownProtect);
ObDereferenceObject(Thread);
- ObDereferenceObject(Process);
return Status;
}
/* Release rundown and dereference */
ExReleaseRundownProtection(&Process->RundownProtect);
ObDereferenceObject(Thread);
- ObDereferenceObject(Process);
return Status;
}
/* Dereference completely to kill it */
ObDereferenceObjectEx(Thread, 2);
- ObDereferenceObject(Process);
return Status;
}
/* Close its handle, killing it */
ObCloseHandle(ThreadHandle, PreviousMode);
- ObDereferenceObject(Process);
return Status;
}
FoundThread = CidEntry->Object;
/* Make sure it's really a process */
- if (FoundThread->Tcb.DispatcherHeader.Type == ThreadObject)
+ if (FoundThread->Tcb.Header.Type == ThreadObject)
{
/* Safe Reference and return it */
if (ObReferenceObjectSafe(FoundThread))
return Status;
}
-/*
- * @implemented
- */
-HANDLE
-NTAPI
-PsGetCurrentThreadId(VOID)
-{
- return PsGetCurrentThread()->Cid.UniqueThread;
-}
-
/*
* @implemented
*/
return Thread->Cid.UniqueThread;
}
+/*
+ * @implemented
+ */
+HANDLE
+NTAPI
+PsGetCurrentThreadId(VOID)
+{
+ return PsGetCurrentThread()->Cid.UniqueThread;
+}
+
/*
* @implemented
*/
return Thread->ThreadsProcess;
}
+/*
+ * @implemented
+ */
+PEPROCESS
+NTAPI
+PsGetCurrentThreadProcess(VOID)
+{
+ return PsGetCurrentThread()->ThreadsProcess;
+}
+
/*
* @implemented
*/
*/
HANDLE
NTAPI
+PsGetCurrentThreadProcessId(VOID)
+{
+ return PsGetCurrentThread()->Cid.UniqueProcess;
+}
+
+/*
+ * @implemented
+ */
+ULONG
+NTAPI
PsGetThreadSessionId(IN PETHREAD Thread)
{
- return (HANDLE)Thread->ThreadsProcess->Session;
+ return MmGetSessionId(Thread->ThreadsProcess);
}
/*
return Thread->Tcb.Teb;
}
+/*
+ * @implemented
+ */
+PTEB
+NTAPI
+PsGetCurrentThreadTeb(VOID)
+{
+ return PsGetCurrentThread()->Tcb.Teb;
+}
+
/*
* @implemented
*/
return Thread->Tcb.Win32Thread;
}
+/*
+ * @implemented
+ */
+PVOID
+NTAPI
+PsGetCurrentThreadWin32Thread(VOID)
+{
+ return PsGetCurrentThread()->Tcb.Win32Thread;
+}
+
/*
* @implemented
*/
Thread->HardErrorsAreDisabled = HardErrorsAreDisabled;
}
-/*
- * @implemented
- */
-PVOID
-NTAPI
-PsGetCurrentThreadWin32Thread(VOID)
-{
- return PsGetCurrentThread()->Tcb.Win32Thread;
-}
-
/*
* @implemented
*/