CmGetVisibleMaxValueNameLenAndDataLen

__int64 __fastcall CmGetVisibleMaxValueNameLenAndDataLen(
        __int64 a1,
        __int64 a2,
        __int64 a3,
        _DWORD *a4,
        unsigned int *a5){
  unsigned int *v5; 
  __int64 v9; 
  __int64 v10; 
  __int64 v11; 
  __int64 v12; 
  unsigned __int16 v13; 
  unsigned int v14; 
  unsigned int v15; 
  int v16; 
  int v17; 
  int v18; 
  int v19; 

  v5 = a5;
  *a4 = 0;
  v17 = 0;
  v16 = -1;
  *v5 = 0;
  v18 = -1;
  v19 = 0;
  if( a2 )
  {
    *a4 = *(_DWORD *)(a2 + 60);
    *v5 = *(_DWORD *)(a2 + 64);
  }
  if( !a1 )
    return 0i64;
  *a4 = *(unsigned __int16 *)(a1 + 178);
  *v5 = *(_DWORD *)(a1 + 180);
  if( !a3 )
    return 0i64;
  v9 = *(_QWORD *)(a1 + 288);
  if( !v9 )
    return 0i64;
  if( v9 != a3 )
    return 0i64;
  *a4 = 0;
  *v5 = 0;
  if( !*(_DWORD *)(a1 + 280) )
    return 0i64;
  v10 = (*(__int64(__fastcall **)(_QWORD, _QWORD, int *))(*(_QWORD *)(a1 + 32) + 8i64))(
          *(_QWORD *)(a1 + 32),
          *(unsigned int *)(a1 + 284),
          &v16);
  if( v10 )
  {
    v11 = 0i64;
    if( *(_DWORD *)(a1 + 280) )
    {
      while( 1 )
      {
        v12 = (*(__int64(__fastcall **)(_QWORD, _QWORD, int *))(*(_QWORD *)(a1 + 32) + 8i64))(
                *(_QWORD *)(a1 + 32),
                *(unsigned int *)(v10 + 4 * v11),
                &v18);
        if( !v12 )
          break;
        v13 = 2 * *(_WORD *)(v12 + 2);
        if( (*(_BYTE *)(v12 + 16) & 1) == 0 )
          v13 = *(_WORD *)(v12 + 2);
        if( *a4 < (unsigned int)v13 )
          *a4 = v13;
        v14 = *(_DWORD *)(v12 + 4);
        v15 = v14 + 0x80000000;
        if( v14 < 0x80000000 )
          v15 = v14;
        if( *v5 < v15 )
          *v5 = v15;
        (*(void(__fastcall **)(_QWORD, int *))(*(_QWORD *)(a1 + 32) + 16i64))(*(_QWORD *)(a1 + 32), &v18);
        v11 = (unsigned int)(v11 + 1);
        if( (unsigned int)v11 >= *(_DWORD *)(a1 + 280) )
          goto LABEL_21;
      }
      (*(void(__fastcall **)(_QWORD, int *))(*(_QWORD *)(a1 + 32) + 16i64))(*(_QWORD *)(a1 + 32), &v16);
      return 3221225626i64;
    }
LABEL_21:
    (*(void(__fastcall **)(_QWORD, int *))(*(_QWORD *)(a1 + 32) + 16i64))(*(_QWORD *)(a1 + 32), &v16);
    return 0i64;
  }
  return 3221225626i64;
}

Referenced by:

CmpQueryKeyDataFromCache
CmpQueryKeyDataFromNode