code: def Collect(
        self, knowledge_base, artifact_definition, searcher):
      
      for source in artifact_definition.sources:
        if source.type_indicator not in (
            artifact_definitions.TYPE_INDICATOR_WINDOWS_REGISTRY_KEY,
            artifact_definitions.TYPE_INDICATOR_WINDOWS_REGISTRY_VALUE):
          continue
  
        if source.type_indicator == (
            artifact_definitions.TYPE_INDICATOR_WINDOWS_REGISTRY_KEY):
          key_value_pairs = [{'key': key} for key in source.keys]
        else:
          key_value_pairs = source.key_value_pairs
  
        for key_value_pair in key_value_pairs:
          key_path = key_value_pair['key']
  
          # The artifact definitions currently incorrectly define
          # CurrentControlSet so we correct it here for now.
          # Also see: https://github.com/ForensicArtifacts/artifacts/issues/120
          key_path_upper = key_path.upper()
          if key_path_upper.startswith('%%CURRENT_CONTROL_SET%%'):
            key_path = '{0:s}{1:s}'.format(
                'HKEY_LOCAL_MACHINE\\System\\CurrentControlSet', key_path[23:])
  
          find_spec = registry_searcher.FindSpec(key_path_glob=key_path)
  
          for key_path in searcher.Find(find_specs=[find_spec]):
            try:
              registry_key = searcher.GetKeyByPath(key_path)
            except IOError as exception:
              raise errors.PreProcessFail((
                  'Unable to retrieve Windows Registry key: {0:s} with error: '
                  '{1!s}').format(key_path, exception))
  
            if registry_key:
              value_name = key_value_pair.get('value', None)
              self._ParseKey(knowledge_base, registry_key, value_name)
docs: Collects values using a Windows Registry value artifact definition.
  
      Args:
        knowledge_base (KnowledgeBase): to fill with preprocessing information.
        artifact_definition (artifacts.ArtifactDefinition): artifact definition.
        searcher (dfwinreg.WinRegistrySearcher): Windows Registry searcher to
            preprocess the Windows Registry.
  
      Raises:
        PreProcessFail: if the Windows Registry key or value cannot be read.