PspUmsInitThread
NTSTATUS __fastcall PspUmsInitThread(INT64 a1, char a2, __int64 a3, __int64 a4){
VOID *v6;
INT64 *v7;
VOID *v8;
INT64 v9;
NTSTATUS result;
NTSTATUS v11;
PVOID Object;
v6 = *(VOID **)(a3 + 344);
v7 = *(INT64 **)(a3 + 352);
v8 = (VOID *)v7[1];
v9 = *v7;
*(_QWORD *)(a4 + 5280) = v6;
result = PspUmsInitializeContext(v6);
if( result >= 0 )
{
Object = 0i64;
result = ObReferenceObjectByHandle(v8, 2ui64, (_OBJECT_TYPE *)ExEventObjectType, a2, &Object, 0i64);
if( result >= 0 )
{
v11 = KeInitializeUmsThread(a1, 1i64, v9, (INT64)Object, (INT64)v6);
if( v11 >= 0 )
{
return 0;
}
else
{
KeSetUmsThreadKernelLock((INT64)v6, 0i64);
KeUpdateUmsThreadState((INT64)v6, 2i64, 0);
HalPutDmaAdapter((PADAPTER_OBJECT)Object);
return v11;
}
}
}
return result;
}Referenced by:
PspAllocateThread