PspUmsInitThread
INT64 __fastcall PspUmsInitThread(INT64 a1, INT8 a2, INT64 a3, INT64 a4){
INT64 v6;
INT64 *v7;
void *v8;
INT64 v9;
INT64 result;
int v11;
PVOID Object;
v6 = *(_QWORD *)(a3 + 344);
v7 = *(INT64 **)(a3 + 352);
v8 = (void *)v7[1];
v9 = *v7;
*(_QWORD *)(a4 + 5280) = v6;
result = PspUmsInitializeContext(v6, a4);
if( (int)result >= 0 )
{
Object = 0i64;
LODWORD(result) = ObReferenceObjectByHandle(v8, 2u, (POBJECT_TYPE)ExEventObjectType, a2, &Object, 0i64);
if( (int)result >= 0 )
{
v11 = KeInitializeUmsThread(a1, 1i64, v9, (INT64)Object, v6);
if( v11 >= 0 )
{
return 0i64;
}
else
{
KeSetUmsThreadKernelLock(v6, 0i64);
KeUpdateUmsThreadState(v6, 2i64, 0);
HalPutDmaAdapter((PADAPTER_OBJECT)Object);
return(unsigned int)v11;
}
}
}
return result;
}Referenced by:
PspAllocateThread