docs: def get_windows_if_list(extended=False):
      """Returns windows interfaces through GetAdaptersAddresses.
  
      params:
       - extended: include anycast and multicast IPv6 (default False)"""
      # Should work on Windows XP+
      def _get_mac(x):
          size = x["physical_address_length"]
          if size != 6:
              return ""
          data = bytearray(x["physical_address"])
          return str2mac(bytes(data)[:size])
  
      def _get_ips(x):
          unicast = x['first_unicast_address']
          anycast = x['first_anycast_address']
          multicast = x['first_multicast_address']
  
          def _resolve_ips(y):
              if not isinstance(y, list):
                  return []
              ips = []
              for ip in y:
                  addr = ip['address']['address'].contents
                  if addr.si_family == socket.AF_INET6:
                      ip_key = "Ipv6"
                      si_key = "sin6_addr"
                  else:
                      ip_key = "Ipv4"
                      si_key = "sin_addr"
                  data = getattr(addr, ip_key)
                  data = getattr(data, si_key)
                  data = bytes(bytearray(data.byte))
                  # Build IP
                  if data:
                      ips.append(inet_ntop(addr.si_family, data))
              return ips
  
          ips = []
          ips.extend(_resolve_ips(unicast))
          if extended:
              ips.extend(_resolve_ips(anycast))
              ips.extend(_resolve_ips(multicast))
          return ips
  
      if six.PY2:
          _str_decode = lambda x: x.encode('utf8', errors='ignore')
      else:
          _str_decode = plain_str
      return [
          {
              "name": _str_decode(x["friendly_name"]),
              "win_index": x["interface_index"],
              "description": _str_decode(x["description"]),
              "guid": _str_decode(x["adapter_name"]),
              "mac": _get_mac(x),
              "ipv4_metric": 0 if WINDOWS_XP else x["ipv4_metric"],
              "ipv6_metric": 0 if WINDOWS_XP else x["ipv6_metric"],
              "ips": _get_ips(x)
          } for x in GetAdaptersAddresses()
      ]