CmpFlushNotifiesOnKeyBodyList

void __fastcall CmpFlushNotifiesOnKeyBodyList(__int64 a1, __int64 a2, __int64 a3, char a4){
  __int64 v4; 
  __int64 *v6; 
  __int16 v7; 
  __int64 v9; 
  __int64 *v10; 
  __int64 v11; 
  _PRIVILEGE_SET *v12; 
  _PRIVILEGE_SET *v13; 

  v4 = a1 + 120;
  v6 = *(__int64 **)(a1 + 120);
  v7 = a2;
  while( v6 != (__int64 *)v4 )
  {
    if( *(v6 - 2) )
    {
      LOBYTE(a2) = a4;
      CmpFlushNotify((__int64)(v6 - 4), a2, 0i64);
    }
    v13 = (_PRIVILEGE_SET *)_InterlockedExchange64(v6 + 7, 0i64);
    if( v13 )
      CmpKeyEnumStackFreeResumeContext(v13);
    *((_WORD *)v6 + 8) |= v7;
    v6 = (__int64 *)*v6;
  }
  v9 = 0i64;
  v10 = (__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) )
      {
        LOBYTE(a2) = a4;
        CmpFlushNotify(v11, a2, 0i64);
      }
      v12 = (_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