Beispiel #1
0
 public static IpInterfaceInfo FromByteArray(byte[] buffer)
 {
     var handle = GCHandle.Alloc(0, GCHandleType.Pinned);
     try
     {
         var returnValue = new IpInterfaceInfo();
         var handleAddress = handle.AddrOfPinnedObject();
         Marshal.Copy(buffer, 0, handleAddress, 4);
         var adapterCount = Marshal.ReadInt32(handleAddress);
         var offset = Marshal.SizeOf(adapterCount);
         returnValue.NumAdapters = adapterCount;
         returnValue.Adapters = new IpAdapterIndexMap[adapterCount];
         for (var i = 0; i <= adapterCount - 1; i++)
         {
             var map = new IpAdapterIndexMap();
             var mapPointer = Marshal.AllocHGlobal(Marshal.SizeOf(map));
             Marshal.Copy(buffer, offset, mapPointer, Marshal.SizeOf(map));
             map = (IpAdapterIndexMap)Marshal.PtrToStructure(mapPointer, typeof(IpAdapterIndexMap));
             Marshal.FreeHGlobal(mapPointer);
             returnValue.Adapters[i] = map;
             offset = offset + Marshal.SizeOf(map);
         }
         return returnValue;
     }
     finally
     {
         handle.Free();
     }
 }
Beispiel #2
0
 internal static extern int IpRenewAddress(ref IpAdapterIndexMap adapterIndexMap);