CmpFlushNotifiesOnKeyBodyList
VOID __fastcall CmpFlushNotifiesOnKeyBodyList(INT64 a1, INT64 a2, INT64 a3, CHAR a4){
INT64 v4;
__int64 *v6;
__int16 v7;
__int64 v9;
signed __int64 *v10;
signed __int64 v11;
struct _PRIVILEGE_SET *v12;
struct _PRIVILEGE_SET *v13;
v4 = a1 + 120;
v6 = *(__int64 **)(a1 + 120);
v7 = a2;
while( v6 != (__int64 *)v4 )
{
if( *(v6 - 2) )
CmpFlushNotify((_CM_KEY_BODY *)(v6 - 4), a4, 0i64);
v13 = (struct _PRIVILEGE_SET *)_InterlockedExchange64(v6 + 7, 0i64);
if( v13 )
CmpKeyEnumStackFreeResumeContext(v13);
*((_WORD *)v6 + 8) |= v7;
v6 = (__int64 *)*v6;
}
v9 = 0i64;
v10 = (signed __int64 *)(a1 + 136);
do
{
v11 = *v10;
if( (unsigned __int64)*v10 >= 3
&& v11 == _InterlockedCompareExchange64((volatile signed __int64 *)(a1 + 8 * v9 + 136), 2i64, v11) )
{
if( *(_QWORD *)(v11 + 16) )
CmpFlushNotify((_CM_KEY_BODY *)v11, a4, 0i64);
v12 = (struct _PRIVILEGE_SET *)_InterlockedExchange64((volatile __int64 *)(v11 + 88), 0i64);
if( v12 )
CmpKeyEnumStackFreeResumeContext(v12);
*(_WORD *)(v11 + 48) |= v7;
_InterlockedCompareExchange64((volatile signed __int64 *)(a1 + 8 * v9 + 136), v11, 2i64);
}
v9 = (unsigned int)(v9 + 1);
++v10;
}
while( (unsigned int)v9 < 4 );
}Referenced by:
CmDeleteLayeredKey
CmRenameKey
CmpCommitDeleteKeyUoW
CmpCommitRenameKeyUoW
CmpCompleteUnloadKey
CmpFlushNotifiesPostCallback
CmpInvalidateAllHigherLayerKcbsPostCallback
CmpInvalidateSubtreeWorker
CmpLightWeightCommitDeleteKeyUoW
CmpLightWeightCommitRenameKeyUoW
CmpPerformUnloadKey
CmpRefreshHive
CmpRefreshWorkerRoutine
CmpRemoveHiveFromNamespace
CmpTransMgrFreeVolatileData