CmpPerformKeyBodyDeletionCheck

INT64 __stdcall CmpPerformKeyBodyDeletionCheck(CM_KEY_BODY *KeyBody, CM_TRANS *CmTrans){
  _CM_KEY_CONTROL_BLOCK *KeyControlBlock; 
  int v4; 
  INT64 result; 
  INT64 v6; 
  __int64 v7; 
  LIST_ENTRY *v8; 
  INT64 v9; 
  int v10; 
  LIST_ENTRY *ListIterator; 

  ListIterator = 0i64;
  KeyControlBlock = KeyBody->KeyControlBlock;
  v4 = *((_DWORD *)KeyBody + 12);
  if( (v4 & 9) == 0 )
  {
    if( !CmTrans )
      return 0i64;
    LODWORD(v6) = CmListGetNextElement(KeyControlBlock->KCBUoWListHead, &ListIterator, 32i64);
    v9 = v6;
    if( !v6 )
      return 0i64;
    while( 1 )
    {
      v10 = *(_DWORD *)(v9 + 68);
      if( v10 == 2 || v10 == 11 )
        break;
      LODWORD(result) = CmListGetNextElement(v8, &ListIterator, 32i64);
      v9 = result;
      if( !result )
        return result;
    }
    if( !CmEqualTrans(*(_QWORD *)(v9 + 56), v7) )
      return 0i64;
    v4 = *((_DWORD *)KeyBody + 12);
  }
  if( (v4 & 1) != 0 )
    return 3221226533i64;
  else
    return 3221225852i64;
}

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