using System; using System.Collections.Generic; using System.Runtime.InteropServices; namespace System.Net.NetworkInformation { // Token: 0x020001A6 RID: 422 internal class Win32NetworkInterface2 : NetworkInterface { // Token: 0x06000E12 RID: 3602 RVA: 0x00027B44 File Offset: 0x00025D44 private Win32NetworkInterface2(Win32_IP_ADAPTER_ADDRESSES addr) { this.addr = addr; this.mib4 = default(Win32_MIB_IFROW); this.mib4.Index = addr.Alignment.IfIndex; if (Win32NetworkInterface2.GetIfEntry(ref this.mib4) != 0) { this.mib4.Index = -1; } this.mib6 = default(Win32_MIB_IFROW); this.mib6.Index = addr.Ipv6IfIndex; if (Win32NetworkInterface2.GetIfEntry(ref this.mib6) != 0) { this.mib6.Index = -1; } this.ip4stats = new Win32IPv4InterfaceStatistics(this.mib4); this.ip_if_props = new Win32IPInterfaceProperties2(addr, this.mib4, this.mib6); } // Token: 0x06000E13 RID: 3603 [DllImport("iphlpapi.dll", SetLastError = true)] private static extern int GetAdaptersInfo(byte[] info, ref int size); // Token: 0x06000E14 RID: 3604 [DllImport("iphlpapi.dll", SetLastError = true)] private static extern int GetAdaptersAddresses(uint family, uint flags, IntPtr reserved, byte[] info, ref int size); // Token: 0x06000E15 RID: 3605 [DllImport("iphlpapi.dll", SetLastError = true)] private static extern int GetIfEntry(ref Win32_MIB_IFROW row); // Token: 0x06000E16 RID: 3606 RVA: 0x00027C04 File Offset: 0x00025E04 public static NetworkInterface[] ImplGetAllNetworkInterfaces() { Win32_IP_ADAPTER_ADDRESSES[] adaptersAddresses = Win32NetworkInterface2.GetAdaptersAddresses(); NetworkInterface[] array = new NetworkInterface[adaptersAddresses.Length]; for (int i = 0; i < array.Length; i++) { array[i] = new Win32NetworkInterface2(adaptersAddresses[i]); } return array; } // Token: 0x06000E17 RID: 3607 RVA: 0x00027C40 File Offset: 0x00025E40 public static Win32_IP_ADAPTER_INFO GetAdapterInfoByIndex(int index) { foreach (Win32_IP_ADAPTER_INFO win32_IP_ADAPTER_INFO in Win32NetworkInterface2.GetAdaptersInfo()) { if ((ulong)win32_IP_ADAPTER_INFO.Index == (ulong)((long)index)) { return win32_IP_ADAPTER_INFO; } } return null; } // Token: 0x06000E18 RID: 3608 RVA: 0x00027C7C File Offset: 0x00025E7C private unsafe static Win32_IP_ADAPTER_INFO[] GetAdaptersInfo() { byte[] array = null; int num = 0; Win32NetworkInterface2.GetAdaptersInfo(array, ref num); array = new byte[num]; int adaptersInfo = Win32NetworkInterface2.GetAdaptersInfo(array, ref num); if (adaptersInfo != 0) { throw new NetworkInformationException(adaptersInfo); } List list = new List(); fixed (byte* ptr = (ref array != null && array.Length != 0 ? ref array[0] : ref *null)) { IntPtr intPtr = (IntPtr)((void*)ptr); while (intPtr != IntPtr.Zero) { Win32_IP_ADAPTER_INFO win32_IP_ADAPTER_INFO = new Win32_IP_ADAPTER_INFO(); Marshal.PtrToStructure(intPtr, win32_IP_ADAPTER_INFO); list.Add(win32_IP_ADAPTER_INFO); intPtr = win32_IP_ADAPTER_INFO.Next; } } return list.ToArray(); } // Token: 0x06000E19 RID: 3609 RVA: 0x00027D24 File Offset: 0x00025F24 private unsafe static Win32_IP_ADAPTER_ADDRESSES[] GetAdaptersAddresses() { byte[] array = null; int num = 0; Win32NetworkInterface2.GetAdaptersAddresses(0U, 0U, IntPtr.Zero, array, ref num); array = new byte[num]; int adaptersAddresses = Win32NetworkInterface2.GetAdaptersAddresses(0U, 0U, IntPtr.Zero, array, ref num); if (adaptersAddresses != 0) { throw new NetworkInformationException(adaptersAddresses); } List list = new List(); fixed (byte* ptr = (ref array != null && array.Length != 0 ? ref array[0] : ref *null)) { IntPtr intPtr = (IntPtr)((void*)ptr); while (intPtr != IntPtr.Zero) { Win32_IP_ADAPTER_ADDRESSES win32_IP_ADAPTER_ADDRESSES = new Win32_IP_ADAPTER_ADDRESSES(); Marshal.PtrToStructure(intPtr, win32_IP_ADAPTER_ADDRESSES); list.Add(win32_IP_ADAPTER_ADDRESSES); intPtr = win32_IP_ADAPTER_ADDRESSES.Next; } } return list.ToArray(); } // Token: 0x06000E1A RID: 3610 RVA: 0x00027DD8 File Offset: 0x00025FD8 public override IPInterfaceProperties GetIPProperties() { return this.ip_if_props; } // Token: 0x06000E1B RID: 3611 RVA: 0x00027DE0 File Offset: 0x00025FE0 public override IPv4InterfaceStatistics GetIPv4Statistics() { return this.ip4stats; } // Token: 0x06000E1C RID: 3612 RVA: 0x00027DE8 File Offset: 0x00025FE8 public override PhysicalAddress GetPhysicalAddress() { byte[] array = new byte[this.addr.PhysicalAddressLength]; Array.Copy(this.addr.PhysicalAddress, 0, array, 0, array.Length); return new PhysicalAddress(array); } // Token: 0x06000E1D RID: 3613 RVA: 0x00027E24 File Offset: 0x00026024 public override bool Supports(NetworkInterfaceComponent networkInterfaceComponent) { if (networkInterfaceComponent != NetworkInterfaceComponent.IPv4) { return networkInterfaceComponent == NetworkInterfaceComponent.IPv6 && this.mib6.Index >= 0; } return this.mib4.Index >= 0; } // Token: 0x17000497 RID: 1175 // (get) Token: 0x06000E1E RID: 3614 RVA: 0x00027E6C File Offset: 0x0002606C public override string Description { get { return this.addr.Description; } } // Token: 0x17000498 RID: 1176 // (get) Token: 0x06000E1F RID: 3615 RVA: 0x00027E7C File Offset: 0x0002607C public override string Id { get { return this.addr.AdapterName; } } // Token: 0x17000499 RID: 1177 // (get) Token: 0x06000E20 RID: 3616 RVA: 0x00027E8C File Offset: 0x0002608C public override bool IsReceiveOnly { get { return this.addr.IsReceiveOnly; } } // Token: 0x1700049A RID: 1178 // (get) Token: 0x06000E21 RID: 3617 RVA: 0x00027E9C File Offset: 0x0002609C public override string Name { get { return this.addr.FriendlyName; } } // Token: 0x1700049B RID: 1179 // (get) Token: 0x06000E22 RID: 3618 RVA: 0x00027EAC File Offset: 0x000260AC public override NetworkInterfaceType NetworkInterfaceType { get { return this.addr.IfType; } } // Token: 0x1700049C RID: 1180 // (get) Token: 0x06000E23 RID: 3619 RVA: 0x00027EBC File Offset: 0x000260BC public override OperationalStatus OperationalStatus { get { return this.addr.OperStatus; } } // Token: 0x1700049D RID: 1181 // (get) Token: 0x06000E24 RID: 3620 RVA: 0x00027ECC File Offset: 0x000260CC public override long Speed { get { return (long)((ulong)((this.mib6.Index < 0) ? this.mib4.Speed : this.mib6.Speed)); } } // Token: 0x1700049E RID: 1182 // (get) Token: 0x06000E25 RID: 3621 RVA: 0x00027EFC File Offset: 0x000260FC public override bool SupportsMulticast { get { return !this.addr.NoMulticast; } } // Token: 0x04000CA5 RID: 3237 private Win32_IP_ADAPTER_ADDRESSES addr; // Token: 0x04000CA6 RID: 3238 private Win32_MIB_IFROW mib4; // Token: 0x04000CA7 RID: 3239 private Win32_MIB_IFROW mib6; // Token: 0x04000CA8 RID: 3240 private Win32IPv4InterfaceStatistics ip4stats; // Token: 0x04000CA9 RID: 3241 private IPInterfaceProperties ip_if_props; } }