PsGetWorkOnBehalfThread
_ETHREAD *__stdcall PsGetWorkOnBehalfThread(VOID **Thread, UINT64 *DerefThread){
_ETHREAD *v2;
unsigned __int8 v6;
unsigned __int64 v7;
v2 = (_ETHREAD *)Thread[184];
*(_DWORD *)DerefThread = 0;
if( v2 && Thread != (VOID **)KeGetCurrentThread() )
{
v6 = ExAcquireSpinLockShared(&PspThreadWorkOnBehalfLock);
v2 = (_ETHREAD *)Thread[184];
v7 = v6;
if( v2 )
{
ObfReferenceObjectWithTag(Thread[184], 0x746C6644ui64);
*(_DWORD *)DerefThread = 1;
}
ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)&PspThreadWorkOnBehalfLock);
__writecr8(v7);
}
return v2;
}Referenced by:
AlpcpCaptureAttributes
AlpcpCaptureWorkOnBehalfAttribute
IoReferenceIoAttributionFromThread
IopQueueWorkItemProlog
NtAlpcImpersonateClientContainerOfPort
NtQueryInformationThread
PsGetEffectiveContainerId