Este é um bug que estava presente no Vista e não foi corrigido no Windows 7 ou no Windows 8.
Você deve usar as APIs .NET ou C ++ para obter essas informações. Acho que a coisa mais fácil de fazer é usar o Powershell com o .NET:
$nics = [System.Net.NetworkInformation.NetworkInterface]::GetAllNetworkInterfaces()
foreach ($nic in $nics) {
write-host $nic.name
write-host "MAC Address $($nic.GetPhysicalAddress)"
$props = $nic.GetIPProperties()
$addresses = $props.UnicastAddresses
foreach ($addr in $addresses) {
write-host "IP Address: $($addr.Address.IPAddressToString)"
write-host "IPv4 Mask: $($addr.IPv4Mask.IPAddressToString)"
}
write-host "Gateway: $($props.GatewayAddresses.Address.IPAddressToString)"
write-host "DNS Server(s): $($props.DnsAddresses.IPAddressToString)"
write-host ""
}
Veja a documentação da classe NetworkInterface informações sobre o uso dessa classe .NET com C #, VB ou C ++.