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