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