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