'Query WMI using WMI Query Language (WQL) & parse the results.
Returns: List of WMI objects or `TimeoutException`.'

def _query(self):

    formated_property_names = ','.join(self.property_names)
    wql = 'Select    {property_names}    from    {class_name}{filters}'.format(property_names=formated_property_names, class_name=self.class_name, filters=self.formatted_filters)
    self.logger.debug(u'Querying    WMI:    {0}'.format(wql))
    try:
        flag_return_immediately = 16
        flag_forward_only = 32
        flag_use_amended_qualifiers = 131072
        query_flags = (flag_return_immediately | flag_forward_only)
        includes_qualifiers = (self.is_raw_perf_class and (self._property_counter_types is None))
        if includes_qualifiers:
            self._property_counter_types = CaseInsensitiveDict()
            query_flags |= flag_use_amended_qualifiers
        raw_results = self.get_connection().ExecQuery(wql, 'WQL', query_flags)
        results = self._parse_results(raw_results, includes_qualifiers=includes_qualifiers)
    except pywintypes.com_error:
        self.logger.warning(u'Failed    to    execute    WMI    query    (%s)', wql, exc_info=True)
        results = []
    return results
