GetAdapterAddresses()
provides subnet masks only on Vista and later.
When looping through the unicast addresses pointed to by the FirstUnicastAddress
field of the IP_ADAPTER_ADDRESSES
record, the IP_ADAPTER_UNICAST_ADDRESS
record includes an OnLinkPrefixLength
field. This field is not available on pre-Vista systems. This field is the length of the subnet mask, in bits. For IPv4 unicast addresses, you can use ConvertLengthToIpv4Mask()
to convert the OnLinkPrefixLength
value into a subnet mask, which you can then use to mask the unicast IPv4 address as needed.
On pre-Vista systems, use GetIpAddrTable()
to get a list of the available IPv4 interfaces. The MIB_IPADDRROW
record contains a dwAddr
field for the IPv4 address, a dwMask
field for the subnet mask, and a dwBCastAddr
field for the broadcast address. You can loop through that table looking for each unicast IPv4 address reported by GetAdapterAddresses()
, and then you will have their associated subnet masks and broadcast IP addresses.