RtlpMuiRegSerializeRegistryInfo

NTSTATUS __stdcall RtlpMuiRegSerializeRegistryInfo(INT64 a1, _OWORD *a2, UINT64 *a3){
  NTSTATUS v3; 
  size_t v7; 
  char v8; 
  _DWORD *v9; 
  unsigned int v10; 
  unsigned int v11; 
  _DWORD *v12; 
  unsigned int v13; 
  _DWORD *v14; 
  unsigned int v15; 
  _DWORD *v16; 
  int v17; 
  int v18; 
  int v19; 
  unsigned int v20; 
  char *v21; 
  _DWORD *v22; 
  _DWORD *v23; 
  _DWORD *v24; 
  _DWORD *v25; 
  size_t v26; 
  const VOID *v27; 
  unsigned int v29; 
  const VOID *v30; 
  const VOID *v31; 

  v3 = 0;
  if( !a1 || !a3 )
    return -1073741811;
  v7 = *(_DWORD *)a3;
  if( *(_DWORD *)a3 )
  {
    if( !a2 )
      return -1073741811;
    v8 = 1;
  }
  else
  {
    if( a2 )
      return -1073741811;
    v8 = 0;
  }
  v9 = *(_DWORD **)(a1 + 24);
  v10 = 168;
  v11 = 168;
  if( v9 )
  {
    if( (unsigned int)(*v9 + 168) < 0xA8 )
      return -1073741811;
    v11 = (*v9 + 175) & 0xFFFFFFF8;
  }
  v12 = *(_DWORD **)(a1 + 32);
  if( v12 )
  {
    v13 = v11 + *v12;
    if( v13 < v11 )
      return -1073741811;
    v11 = (v13 + 7) & 0xFFFFFFF8;
  }
  v14 = *(_DWORD **)(a1 + 40);
  if( v14 )
  {
    v15 = v11 + *v14;
    if( v15 < v11 )
      return -1073741811;
    v11 = (v15 + 7) & 0xFFFFFFF8;
  }
  v16 = *(_DWORD **)(a1 + 56);
  if( v16 )
  {
    v29 = v11 + *v16;
    if( v29 < v11 )
      return -1073741811;
    v11 = (v29 + 7) & 0xFFFFFFF8;
  }
  v17 = *(_DWORD *)(a1 + 148);
  if( v17 && *(_QWORD *)(a1 + 128) )
  {
    if( v17 + v11 < v11 )
      return -1073741811;
    v11 = (v17 + v11 + 7) & 0xFFFFFFF8;
  }
  v18 = *(_DWORD *)(a1 + 160);
  if( v18 && *(_QWORD *)(a1 + 152) )
  {
    if( v18 + v11 < v11 )
      return -1073741811;
    v11 = (v18 + v11 + 7) & 0xFFFFFFF8;
  }
  v19 = *(_DWORD *)(a1 + 144);
  if( !v19 || !*(_QWORD *)(a1 + 136) )
    goto LABEL_22;
  v20 = v11 + v19;
  if( v20 < v11 )
    return -1073741811;
  v11 = (v20 + 7) & 0xFFFFFFF8;
LABEL_22:
  if( v8 )
  {
    if( v7 < v11 )
    {
      v3 = -1073741789;
    }
    else
    {
      memset(a2, 0i64, v7);
      v21 = (char *)a2 + 168;
      *a2 = *(_OWORD *)a1;
      a2[1] = *(_OWORD *)(a1 + 16);
      a2[2] = *(_OWORD *)(a1 + 32);
      a2[3] = *(_OWORD *)(a1 + 48);
      a2[4] = *(_OWORD *)(a1 + 64);
      a2[5] = *(_OWORD *)(a1 + 80);
      a2[6] = *(_OWORD *)(a1 + 96);
      a2[7] = *(_OWORD *)(a1 + 112);
      a2[8] = *(_OWORD *)(a1 + 128);
      a2[9] = *(_OWORD *)(a1 + 144);
      *((_QWORD *)a2 + 20) = *(_QWORD *)(a1 + 160);
      v22 = *(_DWORD **)(a1 + 24);
      if( v22 )
      {
        memmove((char *)a2 + 168, v22, *v22);
        *((_QWORD *)a2 + 23) = 0i64;
        *((_QWORD *)a2 + 3) = 168i64;
        v21 = (char *)a2 + ((**(_DWORD **)(a1 + 24) + 175) & 0xFFFFFFF8);
        v10 = (**(_DWORD **)(a1 + 24) + 175) & 0xFFFFFFF8;
      }
      v23 = *(_DWORD **)(a1 + 32);
      if( v23 )
      {
        memmove(v21, v23, *v23);
        *((_QWORD *)v21 + 2) = 0i64;
        *((_QWORD *)v21 + 3) = 0i64;
        *((_QWORD *)a2 + 4) = v21 - (char *)a2;
        v21 = (char *)a2 + ((v10 + **(_DWORD **)(a1 + 32) + 7) & 0xFFFFFFF8);
        v10 = (v10 + **(_DWORD **)(a1 + 32) + 7) & 0xFFFFFFF8;
      }
      v24 = *(_DWORD **)(a1 + 40);
      if( v24 )
      {
        memmove(v21, v24, *v24);
        *((_QWORD *)v21 + 1) = 0i64;
        *((_QWORD *)a2 + 5) = v21 - (char *)a2;
        v21 = (char *)a2 + ((v10 + **(_DWORD **)(a1 + 40) + 7) & 0xFFFFFFF8);
        v10 = (v10 + **(_DWORD **)(a1 + 40) + 7) & 0xFFFFFFF8;
      }
      v25 = *(_DWORD **)(a1 + 56);
      if( v25 )
      {
        memmove(v21, v25, *v25);
        *((_QWORD *)a2 + 7) = v21 - (char *)a2;
        v21 = (char *)a2 + ((v10 + **(_DWORD **)(a1 + 56) + 7) & 0xFFFFFFF8);
        v10 = (v10 + **(_DWORD **)(a1 + 56) + 7) & 0xFFFFFFF8;
      }
      if( *(_DWORD *)(a1 + 148) )
      {
        v30 = *(const VOID **)(a1 + 128);
        if( v30 )
        {
          memmove(v21, v30, *(_DWORD *)(a1 + 148));
          *((_QWORD *)a2 + 16) = v21 - (char *)a2;
          v21 = (char *)a2 + ((v10 + *(_DWORD *)(a1 + 148) + 7) & 0xFFFFFFF8);
          v10 = (v10 + *(_DWORD *)(a1 + 148) + 7) & 0xFFFFFFF8;
        }
      }
      if( *(_DWORD *)(a1 + 160) )
      {
        v31 = *(const VOID **)(a1 + 152);
        if( v31 )
        {
          memmove(v21, v31, *(_DWORD *)(a1 + 160));
          *((_QWORD *)a2 + 19) = v21 - (char *)a2;
          v21 = (char *)a2 + ((v10 + *(_DWORD *)(a1 + 160) + 7) & 0xFFFFFFF8);
        }
      }
      v26 = *(_DWORD *)(a1 + 144);
      if( v26 )
      {
        v27 = *(const VOID **)(a1 + 136);
        if( v27 )
        {
          memmove(v21, v27, v26);
          *((_QWORD *)a2 + 17) = v21 - (char *)a2;
        }
      }
      *((_QWORD *)a2 + 6) = 0i64;
      *((_QWORD *)a2 + 8) = 0i64;
      *((_QWORD *)a2 + 10) = 0i64;
      *((_QWORD *)a2 + 11) = 0i64;
      *((_QWORD *)a2 + 12) = 0i64;
      *((_QWORD *)a2 + 13) = 0i64;
      *(_DWORD *)a2 = 1024;
    }
  }
  *(_DWORD *)a3 = v11;
  return v3;
}

Referenced by:

RtlpMuiRegCreateKernelRegistryInfo