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