CmpCleanupLightWeightPrepare
VOID __stdcall CmpCleanupLightWeightPrepare(_CM_TRANS *CmTrans, UINT64 CommitSucceeded){
_LIST_ENTRY *p_KCBUoWListHead;
__int64 v3;
__int64 v4;
UINT64 *v5;
int v6;
_CMP_DISCARD_AND_REPLACE_KCB_CONTEXT *v7;
unsigned int *v8;
INT64 v9;
LIST_ENTRY *ListIterator;
if( CmTrans )
{
ListIterator = 0i64;
p_KCBUoWListHead = &CmTrans->KCBUoWListHead;
while( 1 )
{
while( 1 )
{
while( 1 )
{
do
{
LODWORD(v3) = CmListGetNextElement(p_KCBUoWListHead, &ListIterator, 0i64);
v4 = v3;
if( !v3 )
return;
v5 = *(UINT64 **)(v3 + 104);
}
while( !v5 );
v6 = *(_DWORD *)(v3 + 68);
if( !v6 )
{
LABEL_16:
CmpFreeKeyByCell(
*(_QWORD *)(*(_QWORD *)(v4 + 48) + 32i64),
*(unsigned int *)(*(_QWORD *)(v4 + 48) + 40i64),
0);
v5 = *(UINT64 **)(v4 + 104);
goto LABEL_17;
}
if( v6 != 1 )
break;
LABEL_23:
*(_QWORD *)(v4 + 104) = 0i64;
}
if( v6 != 2 )
break;
LABEL_17:
if( v5 )
{
CmpLightWeightCleanupModifyKeyDataUoW(*(_QWORD *)(*(_QWORD *)(v4 + 48) + 32i64), v5);
*(_QWORD *)(v4 + 104) = 0i64;
}
v7 = *(_CMP_DISCARD_AND_REPLACE_KCB_CONTEXT **)(v4 + 112);
if( v7 )
{
CmpCleanupDiscardReplaceContext(v7);
CmSiFreeMemory(*(PPRIVILEGE_SET *)(v4 + 112));
goto LABEL_21;
}
}
if( v6 == 3 )
goto LABEL_23;
if( v6 > 3 )
{
if( v6 <= 6 )
{
CmpLightWeightCleanupSetValueKeyUoW(*(_QWORD *)(*(_QWORD *)(v4 + 48) + 32i64), v5);
v8 = *(unsigned int **)(v4 + 112);
*(_QWORD *)(v4 + 104) = 0i64;
if( v8 )
{
v9 = *v8;
if( (_DWORD)v9 != -1 )
{
CmpFreeValue(*(_QWORD *)(*(_QWORD *)(v4 + 48) + 32i64), v9);
v8 = *(unsigned int **)(v4 + 112);
}
CmpFreeTransientPoolWithTag(v8, 0x77554D43ui64);
LABEL_21:
*(_QWORD *)(v4 + 112) = 0i64;
}
}
else
{
switch( v6 )
{
case 9:
ExFreePoolWithTag(v5, 0x77554D43u);
goto LABEL_23;
case 10:
goto LABEL_23;
case 12:
goto LABEL_16;
}
}
}
}
}
}Referenced by:
CmpCommitLightWeightTransaction
CmpPrepareLightWeightTransaction