IopQueueWorkItemProlog
INT64 __fastcall IopQueueWorkItemProlog(INT64 a1, INT64 a2, INT64 a3){
INT64 result;
_ETHREAD *CurrentThread;
void *WorkOnBehalfThread;
_OWORD *v9;
int v10;
v10 = 0;
if( IopIsActivityTracingEnabled()
&& KeGetCurrentIrql() < 2u
&& (v9 = (_OWORD *)*((_QWORD *)KeGetCurrentThread() + 180)) != 0i64 )
{
*(_OWORD *)(a1 + 68) = *v9;
}
else
{
*(_OWORD *)(a1 + 68) = 0i64;
}
if( (*((_DWORD *)KeGetPcr() + 3243) & 0x10001) == 0 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
WorkOnBehalfThread = (void *)PsGetWorkOnBehalfThread((__int64)CurrentThread, &v10);
*(_QWORD *)(a1 + 56) = WorkOnBehalfThread;
if( WorkOnBehalfThread )
{
if( !v10 )
ObfReferenceObjectWithTag(WorkOnBehalfThread, 0x746C6644u);
}
else if( *(_QWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 1296i64) || PopEnergyEstimationEnabled )
{
ObfReferenceObjectWithTag(CurrentThread, 0x746C6644u);
*(_QWORD *)(a1 + 56) = CurrentThread;
}
}
ObfReferenceObjectWithTag(*(PVOID *)(a1 + 40), 0x746C6644u);
*(_QWORD *)(a1 + 32) = a2;
result = a1;
*(_QWORD *)(a1 + 48) = a3;
return result;
}Referenced by:
IoQueueWorkItem
IoQueueWorkItemEx
IoQueueWorkItemToNode
IoTryQueueWorkItem
PnpDeviceCompletionRequestDestroy