KeInitializeUmsThread
INT64 __fastcall KeInitializeUmsThread(INT64 a1, INT64 a2, INT64 a3, INT64 a4, INT64 a5){
int v6;
char *PoolWithTag;
unsigned int v10;
char *v11;
v6 = a2;
PoolWithTag = (char *)ExAllocatePoolWithTag(NonPagedPoolNx, 0x88ui64, 0x736D554Bui64);
v10 = 0;
v11 = PoolWithTag;
if( !PoolWithTag )
return 3221225495i64;
memset((INT64)(PoolWithTag + 24), 0i64);
*(_QWORD *)v11 = a5;
*((_QWORD *)v11 + 1) = a3;
*((_QWORD *)v11 + 2) = a4;
if( v6 )
KeInitializeEvent((_KEVENT *)v11 + 2, SynchronizationEvent, 0);
else
KeInitializeQueue((_KQUEUE *)(v11 + 32), 1ui64);
if( (KeFeatureBits & 0x10000000) != 0 )
{
*(_QWORD *)(a1 + 496) = v11;
*(_QWORD *)(a1 + 504) = -1i64;
_interlockedbittestandset((volatile signed __int32 *)a1, 31 - (v6 != 0));
}
else
{
v10 = -1073741637;
ExFreePoolWithTag(v11, 0);
}
return v10;
}Referenced by:
PspAttachThreadToUmsCompletionList
PspUmsInitThread