CmpPromoteSingleKeyFromKcbStacks
__int64 __fastcall CmpPromoteSingleKeyFromKcbStacks(__int64 a1, __int64 a2, char a3){
INT16 v5;
char v6;
_QWORD *KcbAtLayerHeight;
INT16 v8;
INT64 v9;
int started;
INT64 EntryAtLayerHeight;
INT16 v12;
INT64 v13;
INT64 v16[10];
INT64 v17[10];
memset(v17, 0i64, sizeof(v17));
memset(v16, 0i64, sizeof(v16));
CmpInitializeKeyNodeStack((INT64)v17);
CmpInitializeKeyNodeStack((INT64)v16);
v5 = *(_WORD *)(a1 + 2);
v6 = 0;
KcbAtLayerHeight = (_QWORD *)CmpGetKcbAtLayerHeight(a1, v5);
v9 = CmpGetKcbAtLayerHeight(a2, v8);
started = CmpStartKeyNodeStackFromKcbStack((INT64)v17, a1);
if( started < 0 )
goto LABEL_12;
started = CmpStartKeyNodeStackFromKcbStack((INT64)v16, a2);
if( started < 0 )
goto LABEL_12;
EntryAtLayerHeight = CmpKeyNodeStackGetEntryAtLayerHeight((INT64)v17, v5);
v13 = CmpKeyNodeStackGetEntryAtLayerHeight((INT64)v16, v12);
if( *(_DWORD *)(v9 + 40) == -1 )
{
started = CmpPartialPromoteSingleKeyFromKeyNodeStacks((__int16 *)v17, (__int64)v16);
if( started < 0 )
goto LABEL_12;
v6 = 1;
*(_DWORD *)(v9 + 40) = *(_DWORD *)(v13 + 8);
}
if( a3 )
{
started = CmpFullPromoteSingleKeyFromKeyNodeStacks((INT64)v17, (INT16 *)v16);
if( started < 0 )
goto LABEL_10;
v6 = 1;
}
started = 0;
LABEL_10:
if( v6 )
{
++*(_QWORD *)(v9 + 304);
CmpRebuildKcbCacheFromNode((PVOID)v9, *(_QWORD *)(v13 + 16), 0i64, 0);
++KcbAtLayerHeight[38];
CmpRebuildKcbCacheFromNode(KcbAtLayerHeight, *(_QWORD *)(EntryAtLayerHeight + 16), 0i64, 0);
}
LABEL_12:
CmpCleanupKeyNodeStack((INT64)v16);
CmpCleanupKeyNodeStack((INT64)v17);
return(unsigned int)started;
}Referenced by:
CmpPartialPromoteSubkeys
CmpPromoteKey
CmpPromoteSubtree