RtlpMuiRegFreeRegistryInfo
__int64 __fastcall RtlpMuiRegFreeRegistryInfo(__int64 a1, unsigned int a2){
unsigned int v2;
unsigned int v4;
void *v5;
void *v6;
void *v7;
void *v8;
__int64 v9;
__int64 v10;
__int64 v11;
__int64 v12;
__int64 v13;
__int64 v14;
void *v16;
_DWORD *v17;
_DWORD *v18;
_DWORD *v19;
_DWORD *v20;
_DWORD *v21;
void *v22;
v2 = 0;
if( a1 && a2 )
{
v4 = 4095;
if( (a2 & 0x400) == 0 )
v4 = a2;
if( (v4 & 1) != 0 )
{
v5 = *(void **)(a1 + 24);
if( v5 )
{
if( (*(_DWORD *)a1 & 1) != 0 )
ExFreePoolWithTag(v5, 0);
*(_QWORD *)(a1 + 24) = 0i64;
}
*(_DWORD *)a1 &= ~1u;
}
if( (v4 & 2) != 0 )
{
v6 = *(void **)(a1 + 32);
if( v6 )
{
if( (*(_DWORD *)a1 & 2) != 0 )
ExFreePoolWithTag(v6, 0);
*(_QWORD *)(a1 + 32) = 0i64;
}
*(_DWORD *)a1 &= ~2u;
}
if( (v4 & 4) != 0 )
{
v7 = *(void **)(a1 + 40);
if( v7 )
{
if( (*(_DWORD *)a1 & 4) != 0 )
ExFreePoolWithTag(v7, 0);
*(_QWORD *)(a1 + 40) = 0i64;
}
*(_DWORD *)a1 &= ~4u;
}
if( (v4 & 8) != 0 )
{
v8 = *(void **)(a1 + 48);
if( v8 )
{
if( (*(_DWORD *)a1 & 8) != 0 )
ExFreePoolWithTag(v8, 0);
*(_QWORD *)(a1 + 48) = 0i64;
}
*(_DWORD *)a1 &= ~8u;
}
if( (v4 & 0x10) != 0 )
{
v9 = *(_QWORD *)(a1 + 56);
if( v9 )
{
if( (*(_DWORD *)a1 & 0x10) != 0 )
{
*(_DWORD *)(v9 + 40) &= ~0x40u;
v17 = *(_DWORD **)(a1 + 56);
if( v17 )
{
if( (v17[10] & 0x40) == 0 )
ExFreePoolWithTag(v17, 0);
}
}
*(_QWORD *)(a1 + 56) = 0i64;
}
*(_DWORD *)a1 &= ~0x10u;
}
if( (v4 & 0x20) != 0 )
{
v10 = *(_QWORD *)(a1 + 64);
if( v10 )
{
if( (*(_DWORD *)a1 & 0x20) != 0 )
{
*(_DWORD *)(v10 + 40) &= ~0x40u;
v18 = *(_DWORD **)(a1 + 64);
if( v18 )
{
if( (v18[10] & 0x40) == 0 )
ExFreePoolWithTag(v18, 0);
}
}
*(_QWORD *)(a1 + 64) = 0i64;
}
*(_DWORD *)a1 &= ~0x20u;
}
if( (v4 & 0x40) != 0 )
{
v11 = *(_QWORD *)(a1 + 88);
if( v11 )
{
if( (*(_DWORD *)a1 & 0x40) != 0 )
{
*(_DWORD *)(v11 + 40) &= ~0x40u;
v19 = *(_DWORD **)(a1 + 88);
if( v19 )
{
if( (v19[10] & 0x40) == 0 )
ExFreePoolWithTag(v19, 0);
}
}
*(_QWORD *)(a1 + 88) = 0i64;
}
*(_DWORD *)a1 &= ~0x40u;
}
if( (v4 & 0x80u) != 0 )
{
v12 = *(_QWORD *)(a1 + 80);
if( v12 )
{
if( (*(_DWORD *)a1 & 0x80u) != 0 )
{
*(_DWORD *)(v12 + 40) &= ~0x40u;
v20 = *(_DWORD **)(a1 + 80);
if( v20 )
{
if( (v20[10] & 0x40) == 0 )
ExFreePoolWithTag(v20, 0);
}
}
*(_QWORD *)(a1 + 80) = 0i64;
}
*(_DWORD *)a1 &= ~0x80u;
}
if( (v4 & 0x200) != 0 )
{
v13 = *(_QWORD *)(a1 + 96);
if( v13 )
{
if( (*(_DWORD *)a1 & 0x200) != 0 )
{
*(_DWORD *)(v13 + 40) &= ~0x40u;
v21 = *(_DWORD **)(a1 + 96);
if( v21 )
{
if( (v21[10] & 0x40) == 0 )
ExFreePoolWithTag(v21, 0);
}
}
*(_QWORD *)(a1 + 96) = 0i64;
}
*(_DWORD *)a1 &= ~0x200u;
}
if( (v4 & 0x800) != 0 )
{
v16 = *(void **)(a1 + 136);
if( v16 )
{
if( (*(_DWORD *)a1 & 0x800) != 0 )
ExFreePoolWithTag(v16, 0);
*(_QWORD *)(a1 + 136) = 0i64;
}
*(_DWORD *)a1 &= ~0x800u;
}
if( (v4 & 0xFFF) != 0 )
{
v14 = *(_QWORD *)(a1 + 104);
if( v14 )
{
RtlpMuiRegFreeRegistryInfo(v14, v4);
v22 = *(void **)(a1 + 104);
if( v22 )
ExFreePoolWithTag(v22, 0);
*(_QWORD *)(a1 + 104) = 0i64;
}
}
}
else
{
return(unsigned int)-1073741811;
}
return v2;
}Referenced by:
RtlpMuiRegCreateKernelRegistryInfo
RtlpMuiRegFreeRegistryInfo
RtlpMuiRegLoadInstalled
RtlpMuiRegLoadRegistryInfo