CmpPromoteSingleKeyFromParentKcbAndChildKeyNode
INT64 __fastcall CmpPromoteSingleKeyFromParentKcbAndChildKeyNode(INT64 a1, INT16 *a2, CHAR a3){
char v6;
INT16 v7;
_CM_KEY_CONTROL_BLOCK *KcbAtLayerHeight;
int started;
INT64 EntryAtLayerHeight;
INT16 v11;
INT64 result[10];
memset((INT64)result, 0i64);
v6 = 0;
CmpInitializeKeyNodeStack((INT64)result);
v7 = *(_WORD *)(a1 + 2);
KcbAtLayerHeight = (_CM_KEY_CONTROL_BLOCK *)CmpGetKcbAtLayerHeight(a1, v7);
started = CmpStartKeyNodeStackFromKcbStack((INT64)result, a1);
if( started < 0 )
goto LABEL_11;
EntryAtLayerHeight = CmpKeyNodeStackGetEntryAtLayerHeight((INT64)result, v7);
if( *(_DWORD *)(CmpKeyNodeStackGetEntryAtLayerHeight((INT64)a2, v11) + 8) == -1 )
{
started = CmpPartialPromoteSingleKeyFromKeyNodeStacks((INT16 *)result, (INT64)a2);
if( started < 0 )
goto LABEL_11;
v6 = 1;
}
if( a3 )
{
started = CmpFullPromoteSingleKeyFromKeyNodeStacks((INT64)result, a2);
if( started < 0 )
goto LABEL_9;
v6 = 1;
}
started = 0;
LABEL_9:
if( v6 )
{
++KcbAtLayerHeight->SequenceNumber;
CmpRebuildKcbCacheFromNode(KcbAtLayerHeight, *(_CM_KEY_NODE **)(EntryAtLayerHeight + 16));
}
LABEL_11:
CmpCleanupKeyNodeStack((INT64)result);
return(unsigned int)started;
}Referenced by:
CmpPartialPromoteSubkeys
CmpPromoteSubtree