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