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 <Win32_IP_ADAPTER_INFO> list = new List <Win32_IP_ADAPTER_INFO>();
fixed(byte *value = ref (array != null && array.Length != 0)?ref array[0] : ref *null)
{
IntPtr intPtr = (IntPtr)((void *)value);
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());
}