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