CmpSortedValueEnumStackCleanup

void __fastcall CmpSortedValueEnumStackCleanup(__int64 a1){
  __int16 i; 
  _QWORD *EntryAtLayerHeight; 
  _PRIVILEGE_SET *v4; 
  _PRIVILEGE_SET *v5; 
  unsigned int v6; 
  _PRIVILEGE_SET *v7; 

  for( i = 0; i <= *(__int16 *)(a1 + 8); ++i )
  {
    EntryAtLayerHeight = (_QWORD *)CmpSortedValueEnumStackGetEntryAtLayerHeight(a1, i);
    v4 = (_PRIVILEGE_SET *)EntryAtLayerHeight[1];
    if( v4 )
      CmSiFreeMemory(v4);
    v5 = (_PRIVILEGE_SET *)EntryAtLayerHeight[2];
    if( v5 )
    {
      v6 = 0;
      if( *((_DWORD *)EntryAtLayerHeight + 6) )
      {
        do(*(void(__fastcall **)(_QWORD, __int64))(*EntryAtLayerHeight + 16i64))(
            *EntryAtLayerHeight,
            EntryAtLayerHeight[2] + 8i64 * v6++);
        while( v6 < *((_DWORD *)EntryAtLayerHeight + 6) );
        v5 = (_PRIVILEGE_SET *)EntryAtLayerHeight[2];
      }
      CmSiFreeMemory(v5);
    }
  }
  v7 = *(_PRIVILEGE_SET **)(a1 + 80);
  if( v7 )
    CmSiFreeMemory(v7);
}

Referenced by:

CmpGetValueCountForKeyNodeStack