CmpLockTwoKcbsShared
void __fastcall CmpLockTwoKcbsShared(_CM_KEY_CONTROL_BLOCK *Kcb1, _CM_KEY_CONTROL_BLOCK *Kcb2){
_CM_KEY_CONTROL_BLOCK *v3;
_EX_PUSH_LOCK *p_KcbPushlock;
_CM_KEY_CONTROL_BLOCK *v5;
_CM_KEY_CONTROL_BLOCK *ProperFirstKcb;
_CM_KEY_CONTROL_BLOCK *ProperSecondKcb;
ProperFirstKcb = 0i64;
ProperSecondKcb = 0i64;
v3 = Kcb1;
if( Kcb1 )
{
if( Kcb2 )
{
if( Kcb1 != Kcb2 )
{
CmpGetCorrectKcbLockOrder(Kcb1, Kcb2, &ProperFirstKcb, &ProperSecondKcb);
v5 = ProperFirstKcb;
ExAcquirePushLockSharedEx(&ProperFirstKcb->KcbPushlock, 0i64);
_InterlockedIncrement((volatile signed __int32 *)&v5->56);
v3 = ProperSecondKcb;
}
p_KcbPushlock = &v3->KcbPushlock;
}
else
{
p_KcbPushlock = &Kcb1->KcbPushlock;
}
ExAcquirePushLockSharedEx(p_KcbPushlock, 0i64);
_InterlockedIncrement((volatile signed __int32 *)&v3->56);
}
else if( Kcb2 )
{
ExAcquirePushLockSharedEx(&Kcb2->KcbPushlock, 0i64);
_InterlockedIncrement((volatile signed __int32 *)&Kcb2->56);
}
}Referenced by:
CmEnumerateKey
CmEnumerateValueKeyFromMergedView
CmQueryKey
CmQueryMultipleValueKey
CmSaveMergedKeys
CmpFindSubkeyInHashByChildCell
NtNotifyChangeMultipleKeys