'Parse Service registry keys and return WindowsServiceInformation.'

def ParseMultiple(self, stats, knowledge_base):

    _ = knowledge_base
    services = {}
    field_map = {'Description': 'description', 'DisplayName': 'display_name', 'Group': 'group_name', 'DriverPackageId': 'driver_package_id', 'ErrorControl': 'error_control', 'ImagePath': 'image_path', 'ObjectName': 'object_name', 'Start': 'startup_type', 'Type': 'service_type', 'Parameters/ServiceDLL': 'service_dll'}
    field_map = {k.lower(): v for (k, v) in field_map.items()}
    for stat in stats:
        if (not stat.HasField('registry_data')):
            continue
        service_name = self._GetServiceName(stat.pathspec.path)
        reg_key = os.path.dirname(stat.pathspec.path)
        service_info = rdf_client.WindowsServiceInformation(name=service_name, registry_key=reg_key)
        services.setdefault(service_name, service_info)
        key = self._GetKeyName(stat.pathspec.path)
        if (key in field_map):
            try:
                services[service_name].Set(field_map[key], stat.registry_data.GetValue())
            except type_info.TypeValueError:
                if (stat.registry_type == rdf_client.StatEntry.RegistryType.REG_MULTI_SZ):
                    services[service_name].Set(field_map[key], utils.SmartUnicode(stat.registry_data.GetValue()))
                else:
                    dest_type = type(services[service_name].Get(field_map[key]))
                    logging.debug('Wrong    type    set    for    %s:%s,    expected    %s,    got    %s', stat.pathspec.path, stat.registry_data.GetValue(), dest_type, type(stat.registry_data.GetValue()))
    return services.itervalues()
