KeInitializeUmsThread
NTSTATUS __stdcall KeInitializeUmsThread(INT64 a1, INT64 a2, INT64 a3, INT64 a4, INT64 a5){
int v6;
VOID **PoolWithTag;
NTSTATUS v10;
VOID **v11;
v6 = a2;
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x88ui64, 1936545099i64);
v10 = 0;
v11 = PoolWithTag;
if( !PoolWithTag )
return -1073741801;
memset(PoolWithTag + 3, 0i64, 0x70u);
*v11 = (VOID *)a5;
v11[1] = (VOID *)a3;
v11[2] = (VOID *)a4;
if( v6 )
KeInitializeEvent((INT64)(v11 + 6), 1, 0);
else
KeInitializeQueue((_KQUEUE *)(v11 + 4), 1ui64);
if( ((unsigned int)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