return STATUS_SUCCESS;
}
-#define FreeW32Process(/*Process*/ W32Process) \
-do { \
- /*PPROCESSINFO W32Process = PsGetProcessWin32Process(Process);*/ \
- /*ASSERT(W32Process);*/ \
- IntDereferenceProcessInfo(W32Process); \
-} while(0)
-
/*
* Called from IntDereferenceProcessInfo
*/
ppiCurrent->peProcess = NULL;
/* Finally, dereference */
- FreeW32Process(/*Process*/ ppiCurrent); // IntDereferenceProcessInfo(ppiCurrent);
+ IntDereferenceProcessInfo(ppiCurrent);
return STATUS_SUCCESS;
}
RtlZeroMemory(ptiCurrent, sizeof(*ptiCurrent));
PsSetThreadWin32Thread(Thread, ptiCurrent, NULL);
+ ObReferenceObject(Thread);
IntReferenceThreadInfo(ptiCurrent);
*W32Thread = ptiCurrent;
return STATUS_SUCCESS;
}
-#define FreeW32Thread(/*Thread*/ W32Thread) \
-do { \
- /*PTHREADINFO W32Thread = PsGetThreadWin32Thread(Thread);*/ \
- /*ASSERT(W32Thread);*/ \
- IntDereferenceThreadInfo(W32Thread); \
-} while(0)
-
/*
* Called from IntDereferenceThreadInfo
*/
MsqCleanupThreadMsgs(pti);
+ ObDereferenceObject(pti->pEThread);
+
ExFreePoolWithTag(pti, USERTAG_THREADINFO);
IntDereferenceProcessInfo(ppi);
/* The thread is dying */
PsSetThreadWin32Thread(Thread /*ptiCurrent->pEThread*/, NULL, ptiCurrent);
- ptiCurrent->pEThread = NULL;
- /* Free the THREADINFO */
- FreeW32Thread(/*Thread*/ ptiCurrent); // IntDereferenceThreadInfo(ptiCurrent);
+ /* Dereference the THREADINFO */
+ IntDereferenceThreadInfo(ptiCurrent);
return STATUS_SUCCESS;
}