CmpQueryKeyDataFromCache

__int64 __fastcall CmpQueryKeyDataFromCache(__int64 a1, int a2, __int64 a3, unsigned int a4, _DWORD *a5, __int64 a6){
  __int64 v9; 
  unsigned __int16 v10; 
  int VisibleMaxNameLenAndClassLen; 
  int v12; 
  int v13; 
  __int64 v14; 
  int v16; 
  unsigned int v17; 
  int v18; 
  int v19[4]; 
  unsigned int v20; 

  v19[0] = -1;
  v19[1] = 0;
  v20 = 0;
  v16 = 0;
  v17 = 0;
  v9 = *(_QWORD *)(a1 + 80);
  if( !v9 )
    return 3221225626i64;
  v10 = *(_WORD *)(v9 + 24);
  if( (*(_DWORD *)v9 & 1) != 0 )
    v10 *= 2;
  if( a2 == 4 )
  {
    VisibleMaxNameLenAndClassLen = CmGetVisibleMaxNameLenAndClassLen(a1, 0i64, a6, &v20, 0i64);
    if( VisibleMaxNameLenAndClassLen >= 0 )
    {
      VisibleMaxNameLenAndClassLen = CmGetVisibleMaxValueNameLenAndDataLen(a1, 0i64, a6, &v16, &v17);
      if( VisibleMaxNameLenAndClassLen >= 0 )
      {
        *a5 = 40;
        if( a4 < 0x28 )
        {
          VisibleMaxNameLenAndClassLen = -1073741789;
          v18 = -1073741789;
        }
        else
        {
          *(_QWORD *)a3 = CmGetKeyLastWriteTime(a1, 0i64, a6);
          *(_DWORD *)(a3 + 8) = 0;
          *(_DWORD *)(a3 + 32) = v10;
          *(_DWORD *)(a3 + 20) = CmGetVisibleValueCount(a1, 0i64, a6);
          *(_DWORD *)(a3 + 16) = v20;
          *(_DWORD *)(a3 + 24) = v16;
          *(_DWORD *)(a3 + 28) = v17;
          v13 = *(_DWORD *)(a1 + 8);
          if( (v13 & 0x40) != 0 || *(_QWORD *)(a1 + 208) != a1 + 208 )
          {
            v14 = (*(__int64(__fastcall **)(_QWORD, _QWORD, int *))(*(_QWORD *)(a1 + 32) + 8i64))(
                    *(_QWORD *)(a1 + 32),
                    *(unsigned int *)(a1 + 40),
                    v19);
            if( v14 )
            {
              *(_DWORD *)(a3 + 12) = CmGetVisibleSubkeyCount(a1, v14, a6);
              (*(void(__fastcall **)(_QWORD, int *))(*(_QWORD *)(a1 + 32) + 16i64))(*(_QWORD *)(a1 + 32), v19);
            }
            else
            {
              VisibleMaxNameLenAndClassLen = -1073741670;
              v18 = -1073741670;
            }
          }
          else if( (v13 & 1) != 0 )
          {
            *(_DWORD *)(a3 + 12) = v12;
          }
          else if( (v13 & 2) != 0 )
          {
            *(_DWORD *)(a3 + 12) = 1;
          }
          else if( (v13 & 4) != 0 )
          {
            *(_DWORD *)(a3 + 12) = **(_DWORD **)(a1 + 112);
          }
          else
          {
            *(_DWORD *)(a3 + 12) = *(_DWORD *)(a1 + 112);
          }
        }
      }
    }
  }
  else
  {
    return(unsigned int)-1073741811;
  }
  return(unsigned int)VisibleMaxNameLenAndClassLen;
}

Referenced by:

CmpQueryKeyData