PsGetWorkOnBehalfThread
__int64 __fastcall PsGetWorkOnBehalfThread(__int64 a1, _DWORD *a2){
__int64 v2;
KIRQL v6;
unsigned __int64 v7;
v2 = *(_QWORD *)(a1 + 1472);
*a2 = 0;
if( v2 && (struct _KTHREAD *)a1 != KeGetCurrentThread() )
{
v6 = ExAcquireSpinLockShared((PEX_SPIN_LOCK)PspThreadWorkOnBehalfLock);
v2 = *(_QWORD *)(a1 + 1472);
v7 = v6;
if( v2 )
{
ObfReferenceObjectWithTag(*(PVOID *)(a1 + 1472), 0x746C6644u);
*a2 = 1;
}
ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)PspThreadWorkOnBehalfLock);
__writecr8(v7);
}
return v2;
}Referenced by:
AlpcpCaptureAttributes
AlpcpCaptureWorkOnBehalfAttribute
IoReferenceIoAttributionFromThread
IopQueueWorkItemProlog
NtAlpcImpersonateClientContainerOfPort
NtQueryInformationThread
PsGetEffectiveContainerId