docs: def _read_routes_c(ipv6=False):
      """Retrieve Windows routes through a GetIpForwardTable2 call.
  
      This is not available on Windows XP !"""
      af = socket.AF_INET6 if ipv6 else socket.AF_INET
      sock_addr_name = 'Ipv6' if ipv6 else 'Ipv4'
      sin_addr_name = 'sin6_addr' if ipv6 else 'sin_addr'
      metric_name = 'ipv6_metric' if ipv6 else 'ipv4_metric'
      ip_len = 16 if ipv6 else 4
      if ipv6:
          lifaddr = in6_getifaddr()
      routes = []
  
      def _extract_ip_netmask(obj):
          ip = obj[sock_addr_name][sin_addr_name]
          ip = bytes(bytearray(ip['byte']))
          # Extract netmask
          netmask = (ip_len - (len(ip) - len(ip.rstrip(b"\x00")))) * 8
          # Build IP
          ip = inet_ntop(af, ip)
          return ip, netmask
  
      for route in GetIpForwardTable2(af):
          # Extract data
          ifIndex = route['InterfaceIndex']
          _dest = route['DestinationPrefix']
          dest, netmask = _extract_ip_netmask(_dest['Prefix'])
          nexthop, _ = _extract_ip_netmask(route['NextHop'])
          metric = route['Metric']
          # Build route
          try:
              iface = dev_from_index(ifIndex)
              if iface.ip == "0.0.0.0":
                  continue
          except ValueError:
              continue
          ip = iface.ip
          # RouteMetric + InterfaceMetric
          metric = metric + getattr(iface, metric_name)
          if ipv6:
              _append_route6(routes, dest, netmask, nexthop,
                             iface, lifaddr, metric)
          else:
              routes.append((atol(dest), itom(int(netmask)),
                             nexthop, iface, ip, metric))
      return routes