CmpLockTwoSecurityCachesExclusiveShared

VOID __stdcall CmpLockTwoSecurityCachesExclusiveShared(_CMHIVE *CmHive1, _CMHIVE *CmHive2){
  _EX_PUSH_LOCK *p_SecurityLock; 
  bool v4; 
  _EX_PUSH_LOCK *v5; 

  p_SecurityLock = &CmHive2->SecurityLock;
  v4 = CmHive1 <= CmHive2;
  if( CmHive1 < CmHive2 )
  {
    ExAcquirePushLockExclusiveEx(&CmHive1->SecurityLock, 0i64);
    ExAcquirePushLockSharedEx(p_SecurityLock, 0i64);
  }
  else
  {
    v5 = &CmHive2->SecurityLock;
    if( !v4 )
    {
      ExAcquirePushLockSharedEx(v5, 0i64);
      v5 = &CmHive1->SecurityLock;
    }
    ExAcquirePushLockExclusiveEx(v5, 0i64);
  }
}

Referenced by:

CmpCopyKeyPartial
CmpDoBuildVirtualStack
CmpSyncKeyValues