[WIN32K] Keep a reference on an ETHREAD while THREADINFO exists

This commit is contained in:
Timo Kreuzer 2018-03-13 23:00:17 +01:00
parent e5904abf94
commit ba893e1172

View file

@ -89,13 +89,6 @@ AllocW32Process(IN PEPROCESS Process,
return STATUS_SUCCESS;
}
#define FreeW32Process(/*Process*/ W32Process) \
do { \
/*PPROCESSINFO W32Process = PsGetProcessWin32Process(Process);*/ \
/*ASSERT(W32Process);*/ \
IntDereferenceProcessInfo(W32Process); \
} while(0)
/*
* Called from IntDereferenceProcessInfo
*/
@ -332,7 +325,7 @@ ExitProcessCallback(PEPROCESS Process)
ppiCurrent->peProcess = NULL;
/* Finally, dereference */
FreeW32Process(/*Process*/ ppiCurrent); // IntDereferenceProcessInfo(ppiCurrent);
IntDereferenceProcessInfo(ppiCurrent);
return STATUS_SUCCESS;
}
@ -397,19 +390,13 @@ AllocW32Thread(IN PETHREAD Thread,
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
*/
@ -428,6 +415,8 @@ UserDeleteW32Thread(PTHREADINFO pti)
MsqCleanupThreadMsgs(pti);
ObDereferenceObject(pti->pEThread);
ExFreePoolWithTag(pti, USERTAG_THREADINFO);
IntDereferenceProcessInfo(ppi);
@ -845,10 +834,9 @@ ExitThreadCallback(PETHREAD Thread)
/* 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;
}