RtlpMuiRegFreeRegistryInfo
NTSTATUS __stdcall RtlpMuiRegFreeRegistryInfo(_MUIREGISTRYINFO *Info, UINT64 Which){
NTSTATUS v2;
unsigned int v4;
void *v5;
void *v6;
void *v7;
void *v8;
__int64 v9;
__int64 v10;
__int64 v11;
__int64 v12;
__int64 v13;
_MUIREGISTRYINFO *v14;
void *v16;
_DWORD *v17;
_DWORD *v18;
_DWORD *v19;
_DWORD *v20;
_DWORD *v21;
void *v22;
v2 = 0;
if( !Info || !(_DWORD)Which )
return -1073741811;
v4 = 4095;
if( (Which & 0x400) == 0 )
v4 = Which;
if( (v4 & 1) != 0 )
{
v5 = (void *)*((_QWORD *)Info + 3);
if( v5 )
{
if( (*Info & 1) != 0 )
ExFreePoolWithTag(v5, 0);
*((_QWORD *)Info + 3) = 0i64;
}
*Info &= ~1u;
}
if( (v4 & 2) != 0 )
{
v6 = (void *)*((_QWORD *)Info + 4);
if( v6 )
{
if( (*Info & 2) != 0 )
ExFreePoolWithTag(v6, 0);
*((_QWORD *)Info + 4) = 0i64;
}
*Info &= ~2u;
}
if( (v4 & 4) != 0 )
{
v7 = (void *)*((_QWORD *)Info + 5);
if( v7 )
{
if( (*Info & 4) != 0 )
ExFreePoolWithTag(v7, 0);
*((_QWORD *)Info + 5) = 0i64;
}
*Info &= ~4u;
}
if( (v4 & 8) != 0 )
{
v8 = (void *)*((_QWORD *)Info + 6);
if( v8 )
{
if( (*Info & 8) != 0 )
ExFreePoolWithTag(v8, 0);
*((_QWORD *)Info + 6) = 0i64;
}
*Info &= ~8u;
}
if( (v4 & 0x10) != 0 )
{
v9 = *((_QWORD *)Info + 7);
if( v9 )
{
if( (*Info & 0x10) != 0 )
{
*(_DWORD *)(v9 + 40) &= ~0x40u;
v17 = (_DWORD *)*((_QWORD *)Info + 7);
if( v17 )
{
if( (v17[10] & 0x40) == 0 )
ExFreePoolWithTag(v17, 0);
}
}
*((_QWORD *)Info + 7) = 0i64;
}
*Info &= ~0x10u;
}
if( (v4 & 0x20) != 0 )
{
v10 = *((_QWORD *)Info + 8);
if( v10 )
{
if( (*Info & 0x20) != 0 )
{
*(_DWORD *)(v10 + 40) &= ~0x40u;
v18 = (_DWORD *)*((_QWORD *)Info + 8);
if( v18 )
{
if( (v18[10] & 0x40) == 0 )
ExFreePoolWithTag(v18, 0);
}
}
*((_QWORD *)Info + 8) = 0i64;
}
*Info &= ~0x20u;
}
if( (v4 & 0x40) != 0 )
{
v11 = *((_QWORD *)Info + 11);
if( v11 )
{
if( (*Info & 0x40) != 0 )
{
*(_DWORD *)(v11 + 40) &= ~0x40u;
v19 = (_DWORD *)*((_QWORD *)Info + 11);
if( v19 )
{
if( (v19[10] & 0x40) == 0 )
ExFreePoolWithTag(v19, 0);
}
}
*((_QWORD *)Info + 11) = 0i64;
}
*Info &= ~0x40u;
}
if( (v4 & 0x80u) != 0 )
{
v12 = *((_QWORD *)Info + 10);
if( v12 )
{
if( (*Info & 0x80u) != 0 )
{
*(_DWORD *)(v12 + 40) &= ~0x40u;
v20 = (_DWORD *)*((_QWORD *)Info + 10);
if( v20 )
{
if( (v20[10] & 0x40) == 0 )
ExFreePoolWithTag(v20, 0);
}
}
*((_QWORD *)Info + 10) = 0i64;
}
*Info &= ~0x80u;
}
if( (v4 & 0x200) != 0 )
{
v13 = *((_QWORD *)Info + 12);
if( v13 )
{
if( (*Info & 0x200) != 0 )
{
*(_DWORD *)(v13 + 40) &= ~0x40u;
v21 = (_DWORD *)*((_QWORD *)Info + 12);
if( v21 )
{
if( (v21[10] & 0x40) == 0 )
ExFreePoolWithTag(v21, 0);
}
}
*((_QWORD *)Info + 12) = 0i64;
}
*Info &= ~0x200u;
}
if( (v4 & 0x800) != 0 )
{
v16 = (void *)*((_QWORD *)Info + 17);
if( v16 )
{
if( (*Info & 0x800) != 0 )
ExFreePoolWithTag(v16, 0);
*((_QWORD *)Info + 17) = 0i64;
}
*Info &= ~0x800u;
}
if( (v4 & 0xFFF) != 0 )
{
v14 = (_MUIREGISTRYINFO *)*((_QWORD *)Info + 13);
if( v14 )
{
RtlpMuiRegFreeRegistryInfo(v14, v4);
v22 = (void *)*((_QWORD *)Info + 13);
if( v22 )
ExFreePoolWithTag(v22, 0);
*((_QWORD *)Info + 13) = 0i64;
}
}
return v2;
}Referenced by:
RtlpMuiRegCreateKernelRegistryInfo
RtlpMuiRegFreeRegistryInfo
RtlpMuiRegLoadInstalled