CmpLightWeightPrepareDeleteKeyUoW
__int64 __fastcall CmpLightWeightPrepareDeleteKeyUoW(
ULONG_PTR *a1,
__int64 a2,
__int64 a3,
struct _LOOKASIDE_LIST_EX *a4){
ULONG_PTR *v4;
UINT64 v7;
UINT64 *v8;
int ModificationData;
int v10;
unsigned __int64 v11;
_CHILD_LIST *v12;
__int64 v13;
INT64 v14;
INT64 v15;
_QWORD *v16;
UINT64 *v18;
int v19;
int v20;
v19 = -1;
v20 = 0;
v4 = 0i64;
v7 = *(_QWORD *)(a1[6] + 32);
v8 = *(UINT64 **)(a1[10] + 104);
v18 = v8;
if( v8 )
{
++*(_DWORD *)v8;
LABEL_5:
v11 = *(unsigned int *)(a1[6] + 40);
if( !(*(__int64(__fastcall **)(UINT64, unsigned __int64, int *))(v7 + 8))(v7, v11, &v19) )
{
LABEL_6:
v10 = -1073741670;
goto LABEL_18;
}
(*(void(__fastcall **)(UINT64, int *))(v7 + 16))(v7, &v19);
if( !CmpMarkKeyDirty(v7, (unsigned int)v11, 0)
|| !HvMarkCellDirty(v7, *(unsigned int *)(*(_QWORD *)(a1[6] + 72) + 40i64), 0) )
{
v10 = -1073741443;
goto LABEL_18;
}
v13 = *(_QWORD *)(a1[6] + 192);
if( !v13 || *(_QWORD *)(v13 + 32) == v13 + 32 )
goto LABEL_24;
CmpAllocateTransientPoolWithTag((_HHIVE *)1, 0x20ui64, 0x31374D43ui64, v12);
v4 = (ULONG_PTR *)v14;
if( !v14 )
goto LABEL_6;
*(_QWORD *)v14 = 0i64;
v15 = v14;
*(_DWORD *)(v14 + 12) = 0;
*(_QWORD *)(v14 + 24) = 0i64;
*(_DWORD *)(v14 + 8) = -1073741823;
v16 = (_QWORD *)(v14 + 16);
v16[1] = v16;
*v16 = v16;
v10 = CmpPrepareDiscardAndReplaceKcbAndUnbackedHigherLayers(a1[6], v15);
if( v10 >= 0 )
{
LABEL_24:
if( CmpRemoveSubKeyFromList((_HHIVE *)v7, (UINT64 *)((char *)v8 + 4 * (v11 >> 31) + 12), (unsigned int)v11) )
{
--*((_DWORD *)v8 + (v11 >> 31) + 1);
v10 = 0;
a1[13] = (ULONG_PTR)v8;
a1[14] = (ULONG_PTR)v4;
return(unsigned int)v10;
}
v10 = -1073741670;
}
if( v4 )
{
CmpCleanupDiscardReplaceContext(v4, a2);
CmSiFreeMemory((PPRIVILEGE_SET)v4);
}
goto LABEL_18;
}
ModificationData = CmpLightWeightCreateModificationData((__int64)a1, (unsigned int **)&v18, a3, a4);
v8 = v18;
v10 = ModificationData;
if( ModificationData >= 0 )
goto LABEL_5;
LABEL_18:
if( v8 )
CmpLightWeightCleanupModifyKeyDataUoW(v7, v8);
return(unsigned int)v10;
}Referenced by:
CmpProcessLightWeightUOW