PspInitializeQuotaBlock

INT64 __fastcall PspInitializeQuotaBlock(INT64 a1, INT64 *a2, INT64 a3){
  INT64 v6; 
  int v7; 
  INT64 *v8; 
  __int64 v9; 
  INT64 *i; 
  char v11; 
  INT64 v12; 
  INT64 v14; 
  v14 = 0i64;
  memset(a3, 0i64);
  *(_DWORD *)(a3 + 516) = 1;
  *(_DWORD *)(a3 + 512) = 1;
  if( a1 && (*(_DWORD *)(a1 + 80) & 0x10) != 0 )
  {
    if( *(_QWORD *)a1 || *(_QWORD *)(a1 + 32) || *(_QWORD *)(a1 + 8) || *(_QWORD *)(a1 + 48) )
      return 3221225485i64;
    a1 = 0i64;
    a2 = &PspDefaultResourceLimits;
  }
  v7 = 0;
  v8 = (INT64 *)(a3 + 64);
  v9 = 0i64;
  for( i = a2; ; i = (INT64 *)((char *)i + 4) )
  {
    v11 = PspResourceFlags[v9 * 2];
    if( (v11 & 2) != 0 )
      goto LABEL_9;
    v12 = a2 ? *(int *)i : *(_QWORD *)(a1 + *(_QWORD *)&PspQuotaLimitOffsets[v9]);
    *v8 = v12;
    if( (v11 & 1) == 0 )
      goto LABEL_9;
    if( v12 != -1 )
      break;
    *v8 = 0i64;
    PspInsertExpansionEntry(&PspQuotaExpansionDescriptors[14 * v7], v8 - 8);
LABEL_9:
    ++v7;
    v8 += 16;
    v9 += 4i64;
    if( v7 >= 4 )
      return 0i64;
  }
  if( !v12 )
    goto LABEL_9;
  v14 = 0i64;
  if( PspExpandLimit((unsigned int)v7, v6, v12, (INT64)&v14) )
  {
    if( !v7 )
      IoEnableIrpCredits();
    goto LABEL_9;
  }
  return 3221225626i64;
}

Referenced by:

PspAssignProcessQuotaBlock