CmpPerformKeyBodyDeletionCheck

int __fastcall CmpPerformKeyBodyDeletionCheck(__int64 a1, __int64 a2){
  LIST_ENTRY *v3; 
  int v4; 
  __int64 v5; 
  __int64 v6; 
  __int64 v7; 
  LIST_ENTRY *v8; 
  __int64 v9; 
  int v10; 
  LIST_ENTRY *ListIterator; 
  ListIterator = 0i64;
  v3 = *(LIST_ENTRY **)(a1 + 8);
  v4 = *(_DWORD *)(a1 + 48);
  if( (v4 & 9) == 0 )
  {
    if( !a2 )
      goto LABEL_3;
    LODWORD(v6) = CmListGetNextElement(v3 + 13, &ListIterator, 32i64);
    v9 = v6;
    if( !v6 )
      goto LABEL_3;
    while( 1 )
    {
      v10 = *(_DWORD *)(v9 + 68);
      if( v10 == 2 || v10 == 11 )
        break;
      LODWORD(v5) = CmListGetNextElement(v8, &ListIterator, 32i64);
      v9 = v5;
      if( !v5 )
        return v5;
    }
    if( !CmEqualTrans(*(_QWORD *)(v9 + 56), v7) )
    {
LABEL_3:
      LODWORD(v5) = 0;
      return v5;
    }
    v4 = *(_DWORD *)(a1 + 48);
  }
  if( (v4 & 1) != 0 )
    LODWORD(v5) = -1073740763;
  else
    LODWORD(v5) = -1073741444;
  return v5;
}

Referenced by:

CmDumpKey
CmEnumerateKey
CmEnumerateValueKey
CmKeyBodyRemapToVirtual
CmKeyBodyRemapToVirtualForEnum
CmKeyBodyReplicateToVirtual
CmLockKeyForWrite
CmQueryLayeredKey
CmQueryMultipleValueForLayeredKey
CmRenameKey
CmSaveKey
CmSetKeyFlags
CmSetLastWriteTimeKey
CmpAcquireSystemDriverHiveContext
CmpAssignKeySecurity
CmpDoQueryKeyName
CmpEnumerateLayeredKey
CmpLoadKeyCommon
CmpPerformUnloadKey
CmpQueryKeySecurity
CmpRefreshHive
CmpSaveBootControlSet
CmpSetKeySecurity
NtCompactKeys
NtCompressKey
NtFlushKey
NtQueryOpenSubKeys
NtQueryOpenSubKeysEx