public Discover() { int size=0; int r = GetNetworkParams(null, ref size); if ((r != ERROR_SUCCESS) && (r != ERROR_BUFFER_OVERFLOW)) throw new Exception("Error invoking GetNetworkParams() : " + r); Byte[] buffer= new Byte[size]; r = GetNetworkParams(buffer, ref size); if (r != ERROR_SUCCESS) throw new Exception("Error invoking GetNetworkParams() " + r); FixedInfo PFixedInfo= new FixedInfo(); ByteArray_To_FixedInfo(ref PFixedInfo, buffer, Marshal.SizeOf(PFixedInfo)); this.hostname = PFixedInfo.HostName; this.domainname = PFixedInfo.DomainName; ArrayList ips = new ArrayList(); ips.Add(IPAddress.Parse(PFixedInfo.DnsServerList.IPAddressString)); IPAddrString ListItem = new IPAddrString(); IntPtr ListNext = new IntPtr(); ListNext = PFixedInfo.DnsServerList.NextPointer; while (ListNext.ToInt32() != 0) { IntPtr_To_IPAddrString(ref ListItem, ListNext, Marshal.SizeOf(ListItem)); ips.Add(IPAddress.Parse(ListItem.IPAddressString)); ListNext = ListItem.NextPointer; } this.dnsServers = (IPAddress[]) ips.ToArray(typeof(IPAddress)); }
private static extern void IntPtr_To_IPAddrString(ref IPAddrString dst, IntPtr src, int size);