CmGetVisibleMaxNameLenAndClassLen

INT64 __fastcall CmGetVisibleMaxNameLenAndClassLen(INT64 a1, INT64 a2, INT64 a3, UINT64 *a4, UINT64 *a5){
  UINT64 *v7; 
  LIST_ENTRY *v9; 
  __int64 v10; 
  __int64 v11; 
  INT64 v12; 
  __int64 v13; 
  unsigned int v14; 
  unsigned int v15; 
  int v16; 
  int v17; 
  LIST_ENTRY *ListIterator; 
  v16 = -1;
  ListIterator = 0i64;
  v7 = a5;
  *(_DWORD *)a4 = 0;
  v17 = 0;
  if( v7 )
    *(_DWORD *)v7 = 0;
  if( a2 )
  {
    *(_DWORD *)a4 = (unsigned __int16)*(_DWORD *)(a2 + 52);
    if( v7 )
      *(_DWORD *)v7 = *(_DWORD *)(a2 + 56);
  }
  if( a1 )
  {
    *(_DWORD *)a4 = *(unsigned __int16 *)(a1 + 176);
    if( a3 )
    {
      v9 = (LIST_ENTRY *)(a1 + 208);
      while( 1 )
      {
        LODWORD(v10) = CmListGetNextElement(v9, &ListIterator, 32i64);
        v11 = v10;
        if( !v10 )
          break;
        if( CmEqualTrans(*(_QWORD *)(v10 + 56), a3) )
        {
          if( *(_DWORD *)(v11 + 68) == 1 )
          {
            v12 = *(_QWORD *)(v11 + 88);
            if( !CmpIsKeyDeleted(v12, 0i64) )
            {
              v13 = (*(__int64(__fastcall **)(_QWORD, _QWORD, int *))(*(_QWORD *)(v12 + 32) + 8i64))(
                      *(_QWORD *)(v12 + 32),
                      *(unsigned int *)(v12 + 40),
                      &v16);
              if( !v13 )
                return 3221225626i64;
              v14 = (unsigned __int16)*(_DWORD *)(v13 + 52);
              if( *(_DWORD *)a4 < v14 )
                *(_DWORD *)a4 = v14;
              if( v7 )
              {
                v15 = *(_DWORD *)(v13 + 56);
                if( *(_DWORD *)v7 < v15 )
                  *(_DWORD *)v7 = v15;
              }
              (*(void(__fastcall **)(_QWORD, int *))(*(_QWORD *)(v12 + 32) + 16i64))(*(_QWORD *)(v12 + 32), &v16);
            }
          }
        }
      }
    }
  }
  return 0i64;
}

Referenced by:

CmpQueryKeyDataFromCache
CmpQueryKeyDataFromNode