Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / Net / System / Net / NetworkInformation / UnsafeNetInfoNativeMethods.cs / 1 / UnsafeNetInfoNativeMethods.cs
namespace System.Net.NetworkInformation {
using System;
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Threading;
using System.Security;
using System.Runtime.CompilerServices;
using System.Security.Permissions;
using System.ComponentModel;
using System.Text;
using Microsoft.Win32.SafeHandles;
internal class IpHelperErrors {
internal const uint Success = 0;
internal const uint ErrorInvalidFunction = 1;
internal const uint ErrorNoSuchDevice = 2;
internal const uint ErrorInvalidData= 13;
internal const uint ErrorInvalidParameter = 87;
internal const uint ErrorBufferOverflow = 111;
internal const uint ErrorInsufficientBuffer = 122;
internal const uint ErrorNoData= 232;
internal const uint Pending = 997;
internal const uint ErrorNotFound = 1168;
internal static void CheckFamilyUnspecified(AddressFamily family)
{
if (family != AddressFamily.InterNetwork && family != AddressFamily.InterNetworkV6
&& family != AddressFamily.Unspecified) {
throw new ArgumentException(SR.GetString(SR.net_invalidversion), "family");
}
}
}
internal enum OldInterfaceType{Unknown=0,Ethernet=6,TokenRing=9,Fddi=15,Ppp=23,Loopback=24,Slip=28};
//
// Per-adapter Flags
//
[Flags]
internal enum AdapterFlags {
DnsEnabled= 0x01,
RegisterAdapterSuffix= 0x02,
DhcpEnabled = 0x04,
ReceiveOnly = 0x08,
NoMulticast= 0x10,
Ipv6OtherStatefulConfig= 0x20
};
[Flags]
internal enum AdapterAddressFlags{
DnsEligible = 0x1,
Transient = 0x2
}
internal enum OldOperationalStatus{
NonOperational =0,
Unreachable =1,
Disconnected =2,
Connecting =3,
Connected =4,
Operational =5
}
[Flags]
internal enum GetAdaptersAddressesFlags
{
SkipUnicast = 0x0001,
SkipAnycast = 0x0002,
SkipMulticast = 0x0004,
SkipDnsServer = 0x0008,
IncludePrefix = 0x0010,
SkipFriendlyName = 0x0020,
}
internal struct IPExtendedAddress{
internal IPAddress mask;
internal IPAddress address;
internal IPExtendedAddress(IPAddress address, IPAddress mask){
this.address = address;
this.mask = mask;
}
}
///
/// IpAddressList - store an IP address with its corresponding subnet mask,
/// both as dotted decimal strings
///
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]
internal struct IpAddrString {
internal IntPtr Next; /* struct _IpAddressList* */
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=16)]
internal string IpAddress;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=16)]
internal string IpMask;
internal uint Context;
//helper method to parse the ipaddresses
internal IPAddressCollection ToIPAddressCollection() {
IpAddrString addr = this;
IPAddressCollection addresslist = new IPAddressCollection();
if (addr.IpAddress.Length != 0)
addresslist.InternalAdd(IPAddress.Parse(addr.IpAddress));
while ( addr.Next != IntPtr.Zero ) {
addr = (IpAddrString)Marshal.PtrToStructure(addr.Next,typeof(IpAddrString));
if (addr.IpAddress.Length != 0)
addresslist.InternalAdd(IPAddress.Parse(addr.IpAddress));
}
return addresslist;
}
internal ArrayList ToIPExtendedAddressArrayList() {
IpAddrString addr = this;
ArrayList addresslist = new ArrayList();
if (addr.IpAddress.Length != 0)
addresslist.Add(new IPExtendedAddress(IPAddress.Parse(addr.IpAddress),IPAddress.Parse(addr.IpMask)));
while ( addr.Next != IntPtr.Zero ) {
addr = (IpAddrString)Marshal.PtrToStructure(addr.Next,typeof(IpAddrString));
if (addr.IpAddress.Length != 0)
addresslist.Add(new IPExtendedAddress(IPAddress.Parse(addr.IpAddress),IPAddress.Parse(addr.IpMask)));
}
return addresslist;
}
internal GatewayIPAddressInformationCollection ToIPGatewayAddressCollection() {
IpAddrString addr = this;
GatewayIPAddressInformationCollection addresslist = new GatewayIPAddressInformationCollection();
if (addr.IpAddress.Length != 0)
addresslist.InternalAdd(new SystemGatewayIPAddressInformation(IPAddress.Parse(addr.IpAddress)));
while ( addr.Next != IntPtr.Zero ) {
addr = (IpAddrString)Marshal.PtrToStructure(addr.Next,typeof(IpAddrString));
if (addr.IpAddress.Length != 0)
addresslist.InternalAdd(new SystemGatewayIPAddressInformation(IPAddress.Parse(addr.IpAddress)));
}
return addresslist;
}
};
internal struct IPAddressInfo{
/* Consider Removing
internal IPAddressInfo(IPAddress addr, IPAddress mask, uint context){
this.addr = addr;
this.mask = mask;
this.context = context;
}
*/
internal IPAddress addr;
internal IPAddress mask;
internal uint context;
}
///
/// Core network information.
///
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]
internal struct FIXED_INFO {
internal const int MAX_HOSTNAME_LEN = 128;
internal const int MAX_DOMAIN_NAME_LEN = 128;
internal const int MAX_SCOPE_ID_LEN = 256;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=MAX_HOSTNAME_LEN + 4)]
internal string hostName;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=MAX_DOMAIN_NAME_LEN + 4)]
internal string domainName;
internal uint currentDnsServer; /* IpAddressList* */
internal IpAddrString DnsServerList;
internal NetBiosNodeType nodeType;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=MAX_SCOPE_ID_LEN + 4)]
internal string scopeId;
internal bool enableRouting;
internal bool enableProxy;
internal bool enableDns;
};
///
/// ADAPTER_INFO - per-adapter information. All IP addresses are stored as
/// strings
///
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]
internal struct IpAdapterInfo {
internal const int MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
internal const int MAX_ADAPTER_NAME_LENGTH = 256;
internal const int MAX_ADAPTER_ADDRESS_LENGTH = 8;
internal IntPtr /* struct _IP_ADAPTER_INFO* */ Next;
internal uint comboIndex;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=MAX_ADAPTER_NAME_LENGTH + 4)]
internal String adapterName;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=MAX_ADAPTER_DESCRIPTION_LENGTH + 4)]
internal String description;
internal uint addressLength;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=MAX_ADAPTER_ADDRESS_LENGTH)]
internal byte[] address;
internal uint index;
internal OldInterfaceType type;
internal bool dhcpEnabled;
internal IntPtr currentIpAddress; /* IpAddressList* */
internal IpAddrString ipAddressList;
internal IpAddrString gatewayList;
internal IpAddrString dhcpServer;
[MarshalAs(UnmanagedType.Bool)]
internal bool haveWins;
internal IpAddrString primaryWinsServer;
internal IpAddrString secondaryWinsServer;
internal uint/*time_t*/ leaseObtained;
internal uint/*time_t*/ leaseExpires;
};
[StructLayout(LayoutKind.Sequential)]
internal struct IpSocketAddress {
internal IntPtr address;
internal int addressLength;
}
// IP_ADAPTER_ANYCAST_ADDRESS
// IP_ADAPTER_MULTICAST_ADDRESS
// IP_ADAPTER_DNS_SERVER_ADDRESS
[StructLayout(LayoutKind.Sequential)]
internal struct IpAdapterAddress {
internal uint length;
internal AdapterAddressFlags flags;
internal IntPtr next;
internal IpSocketAddress address;
}
[StructLayout(LayoutKind.Sequential)]
internal struct IpAdapterUnicastAddress {
internal uint length;
internal AdapterAddressFlags flags;
internal IntPtr next;
internal IpSocketAddress address;
internal PrefixOrigin prefixOrigin;
internal SuffixOrigin suffixOrigin;
internal DuplicateAddressDetectionState dadState;
internal uint validLifetime;
internal uint preferredLifetime;
internal uint leaseLifetime;
}
[StructLayout(LayoutKind.Sequential)]
internal struct IpAdapterPrefix {
internal uint length;
internal uint ifIndex;
internal IntPtr next;
internal IpSocketAddress address;
internal uint prefixLength;
}
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode)]
internal struct IpAdapterAddresses{
internal const int MAX_ADAPTER_ADDRESS_LENGTH = 8;
internal uint length;
internal uint index;
internal IntPtr next;
//needs to be ansi
[MarshalAs(UnmanagedType.LPStr)]
internal string AdapterName;
internal IntPtr FirstUnicastAddress;
internal IntPtr FirstAnycastAddress;
internal IntPtr FirstMulticastAddress;
internal IntPtr FirstDnsServerAddress;
internal string dnsSuffix;
internal string description;
internal string friendlyName;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=MAX_ADAPTER_ADDRESS_LENGTH)]
internal byte[] address;
internal uint addressLength;
internal AdapterFlags flags;
internal uint mtu;
internal NetworkInterfaceType type;
internal OperationalStatus operStatus;
internal uint ipv6Index;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=16)]
internal uint[] zoneIndices; //16
internal IntPtr firstPrefix;
}
///
/// IP_PER_ADAPTER_INFO - per-adapter IP information such as DNS server list.
///
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]
internal struct IpPerAdapterInfo {
internal bool autoconfigEnabled;
internal bool autoconfigActive;
internal IntPtr currentDnsServer; /* IpAddressList* */
internal IpAddrString dnsServerList;
};
///
/// Network Interface information.
///
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode)]
internal struct MibIfRow {
//
// Definitions and structures used by getnetworkparams and getadaptersinfo apis
//
// internal const uint DEFAULT_MINIMUM_ENTITIES = 32;
internal const int MAX_INTERFACE_NAME_LEN = 256;
internal const int MAXLEN_IFDESCR = 256;
internal const int MAXLEN_PHYSADDR = 8;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=MAX_INTERFACE_NAME_LEN)]
internal string wszName;
internal uint dwIndex;
internal uint dwType;
internal uint dwMtu;
internal uint dwSpeed;
internal uint dwPhysAddrLen;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=MAXLEN_PHYSADDR)]
internal byte[] bPhysAddr;
internal uint dwAdminStatus;
internal OldOperationalStatus operStatus;
internal uint dwLastChange;
internal uint dwInOctets;
internal uint dwInUcastPkts;
internal uint dwInNUcastPkts;
internal uint dwInDiscards;
internal uint dwInErrors;
internal uint dwInUnknownProtos;
internal uint dwOutOctets;
internal uint dwOutUcastPkts;
internal uint dwOutNUcastPkts;
internal uint dwOutDiscards;
internal uint dwOutErrors;
internal uint dwOutQLen;
internal uint dwDescrLen;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=MAXLEN_IFDESCR)]
internal byte[] bDescr;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibUdpStats {
internal uint datagramsReceived;
internal uint incomingDatagramsDiscarded;
internal uint incomingDatagramsWithErrors;
internal uint datagramsSent;
internal uint udpListeners;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibTcpStats {
internal uint reTransmissionAlgorithm;
internal uint minimumRetransmissionTimeOut;
internal uint maximumRetransmissionTimeOut;
internal uint maximumConnections;
internal uint activeOpens;
internal uint passiveOpens;
internal uint failedConnectionAttempts;
internal uint resetConnections;
internal uint currentConnections;
internal uint segmentsReceived;
internal uint segmentsSent;
internal uint segmentsResent;
internal uint errorsReceived;
internal uint segmentsSentWithReset;
internal uint cumulativeConnections;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibIpStats {
internal bool forwardingEnabled;
internal uint defaultTtl;
internal uint packetsReceived;
internal uint receivedPacketsWithHeaderErrors;
internal uint receivedPacketsWithAddressErrors;
internal uint packetsForwarded;
internal uint receivedPacketsWithUnknownProtocols;
internal uint receivedPacketsDiscarded;
internal uint receivedPacketsDelivered;
internal uint packetOutputRequests;
internal uint outputPacketRoutingDiscards;
internal uint outputPacketsDiscarded;
internal uint outputPacketsWithNoRoute;
internal uint packetReassemblyTimeout;
internal uint packetsReassemblyRequired;
internal uint packetsReassembled;
internal uint packetsReassemblyFailed;
internal uint packetsFragmented;
internal uint packetsFragmentFailed;
internal uint packetsFragmentCreated;
internal uint interfaces;
internal uint ipAddresses;
internal uint routes;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibIcmpInfo {
internal MibIcmpStats inStats;
internal MibIcmpStats outStats;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibIcmpStats {
internal uint messages;
internal uint errors;
internal uint destinationUnreachables;
internal uint timeExceeds;
internal uint parameterProblems;
internal uint sourceQuenches;
internal uint redirects;
internal uint echoRequests;
internal uint echoReplies;
internal uint timestampRequests;
internal uint timestampReplies;
internal uint addressMaskRequests;
internal uint addressMaskReplies;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibIcmpInfoEx {
internal MibIcmpStatsEx inStats;
internal MibIcmpStatsEx outStats;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibIcmpStatsEx {
internal uint dwMsgs;
internal uint dwErrors;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=256)]
internal uint[] rgdwTypeCount;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibTcpTable {
internal uint numberOfEntries;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibTcpRow {
internal TcpState state;
internal uint localAddr;
internal byte localPort1;
internal byte localPort2;
internal byte localPort3;
internal byte localPort4;
internal uint remoteAddr;
internal byte remotePort1;
internal byte remotePort2;
internal byte remotePort3;
internal byte remotePort4;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibUdpTable {
internal uint numberOfEntries;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibUdpRow {
internal uint localAddr;
internal byte localPort1;
internal byte localPort2;
internal byte localPort3;
internal byte localPort4;
}
[StructLayout(LayoutKind.Sequential)]
internal struct IPOptions {
internal byte ttl;
internal byte tos;
internal byte flags;
internal byte optionsSize;
internal IntPtr optionsData;
internal IPOptions (PingOptions options)
{
ttl = 128;
tos = 0;
flags = 0;
optionsSize = 0;
optionsData = IntPtr.Zero;
if (options != null) {
this.ttl = (byte)options.Ttl;
if (options.DontFragment){
flags = 2;
}
}
}
}
[StructLayout(LayoutKind.Sequential)]
internal struct IcmpEchoReply {
internal uint address;
internal uint status;
internal uint roundTripTime;
internal ushort dataSize;
internal ushort reserved;
internal IntPtr data;
internal IPOptions options;
}
/*
[StructLayout(LayoutKind.Sequential)]
internal struct Ipv6Address {
ushort sin6_port;
uint sin6_flowinfo;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=16)]
byte[] sin6_addr;
uint sin6_scope_id;
} */
[StructLayout(LayoutKind.Sequential, Pack=1)]
internal struct Ipv6Address {
[MarshalAs(UnmanagedType.ByValArray,SizeConst=6)]
internal byte[] Goo;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=16)]
internal byte[] Address; // Replying address.
internal uint ScopeID;
}
[StructLayout(LayoutKind.Sequential)]
internal struct Icmp6EchoReply {
internal Ipv6Address Address;
internal uint Status; // Reply IP_STATUS.
internal uint RoundTripTime; // RTT in milliseconds.
internal IntPtr data;
// internal IPOptions options;
// internal IntPtr data; data os after tjos
}
/*
[StructLayout(LayoutKind.Sequential)]
internal struct Ipv6Address {
ushort sin6_port;
uint sin6_flowinfo;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=16)]
byte[] sin6_addr;
uint sin6_scope_id;
} */
// Reply data follows this structure in memory.
///
/// Wrapper for API's in iphlpapi.dll
///
[
System.Security.SuppressUnmanagedCodeSecurityAttribute()
]
internal static class UnsafeNetInfoNativeMethods {
private const string IPHLPAPI = "iphlpapi.dll";
[DllImport(IPHLPAPI)]
internal extern static uint GetAdaptersInfo(SafeLocalFree pAdapterInfo,ref uint pOutBufLen);
[DllImport(IPHLPAPI)]
internal extern static uint GetAdaptersAddresses(
AddressFamily family,
uint flags,
IntPtr pReserved,
SafeLocalFree adapterAddresses,
ref uint outBufLen);
[DllImport(IPHLPAPI)]
internal extern static uint GetBestInterface(int ipAddress, out int index);
/*
// Consider removing.
[DllImport(IPHLPAPI)]
internal extern static uint GetBestInterfaceEx(byte[] ipAddress, out int index);
*/
[DllImport(IPHLPAPI)]
internal extern static uint GetIfEntry(ref MibIfRow pIfRow);
[DllImport(IPHLPAPI)]
internal extern static uint GetIpStatistics(out MibIpStats statistics);
[DllImport(IPHLPAPI)]
internal extern static uint GetIpStatisticsEx(out MibIpStats statistics, AddressFamily family);
[DllImport(IPHLPAPI)]
internal extern static uint GetTcpStatistics(out MibTcpStats statistics);
[DllImport(IPHLPAPI)]
internal extern static uint GetTcpStatisticsEx(out MibTcpStats statistics, AddressFamily family);
[DllImport(IPHLPAPI)]
internal extern static uint GetUdpStatistics(out MibUdpStats statistics);
[DllImport(IPHLPAPI)]
internal extern static uint GetUdpStatisticsEx(out MibUdpStats statistics, AddressFamily family);
[DllImport(IPHLPAPI)]
internal extern static uint GetIcmpStatistics(out MibIcmpInfo statistics);
[DllImport(IPHLPAPI)]
internal extern static uint GetIcmpStatisticsEx(out MibIcmpInfoEx statistics,AddressFamily family);
[DllImport(IPHLPAPI)]
internal extern static uint GetTcpTable(SafeLocalFree pTcpTable,ref uint dwOutBufLen, bool order);
[DllImport(IPHLPAPI)]
internal extern static uint GetUdpTable(SafeLocalFree pUdpTable,ref uint dwOutBufLen, bool order);
// [DllImport(IPHLPAPI)]
// internal extern static uint GetInterfaceInfo(IntPtr pIfTable,ref uint dwOutBufLen);
// [DllImport(IPHLPAPI)]
// internal extern static uint GetIpAddrTable(SafeLocalFree pIpAddrTable, ref uint dwOutBufLen, bool order);
[DllImport(IPHLPAPI)]
internal extern static uint GetNetworkParams(SafeLocalFree pFixedInfo,ref uint pOutBufLen);
// [DllImport(IPHLPAPI)]
// internal extern static uint GetNumberOfInterfaces(out uint pdwNumIf);
[DllImport(IPHLPAPI)]
internal extern static uint GetPerAdapterInfo(uint IfIndex,SafeLocalFree pPerAdapterInfo,ref uint pOutBufLen);
/* Consider Removing
[DllImport(IPHLPAPI)]
unsafe internal extern static uint NotifyAddrChange(out IntPtr waithandle, [In] NativeOverlapped *overlapped);
*/
[DllImport(IPHLPAPI, SetLastError=true)]
internal extern static SafeCloseIcmpHandle IcmpCreateFile();
[DllImport (IPHLPAPI, SetLastError=true)]
internal extern static SafeCloseIcmpHandle Icmp6CreateFile ();
[DllImport (IPHLPAPI, SetLastError=true)]
internal extern static bool IcmpCloseHandle(IntPtr handle);
// [DllImport(IPHLPAPI)]
// internal extern static uint GetBestInterface(uint address4, out uint bestIfIndex);
[DllImport (IPHLPAPI, SetLastError=true)]
internal extern static uint IcmpSendEcho2 (SafeCloseIcmpHandle icmpHandle, SafeWaitHandle Event, IntPtr apcRoutine, IntPtr apcContext,
uint ipAddress, [In] SafeLocalFree data, ushort dataSize, ref IPOptions options, SafeLocalFree replyBuffer, uint replySize, uint timeout);
[DllImport (IPHLPAPI, SetLastError=true)]
internal extern static uint IcmpSendEcho2 (SafeCloseIcmpHandle icmpHandle, IntPtr Event, IntPtr apcRoutine, IntPtr apcContext,
uint ipAddress, [In] SafeLocalFree data, ushort dataSize, ref IPOptions options, SafeLocalFree replyBuffer, uint replySize, uint timeout);
[DllImport (IPHLPAPI, SetLastError=true)]
internal extern static uint Icmp6SendEcho2 (SafeCloseIcmpHandle icmpHandle, SafeWaitHandle Event, IntPtr apcRoutine, IntPtr apcContext,
byte[] sourceSocketAddress, byte[] destSocketAddress, [In] SafeLocalFree data, ushort dataSize, ref IPOptions options, SafeLocalFree replyBuffer, uint replySize, uint timeout);
[DllImport (IPHLPAPI, SetLastError=true)]
internal extern static uint Icmp6SendEcho2 (SafeCloseIcmpHandle icmpHandle, IntPtr Event, IntPtr apcRoutine, IntPtr apcContext,
byte[] sourceSocketAddress, byte[] destSocketAddress, [In] SafeLocalFree data, ushort dataSize, ref IPOptions options, SafeLocalFree replyBuffer, uint replySize, uint timeout);
[DllImport (IPHLPAPI, SetLastError=true)]
internal unsafe extern static uint IcmpParseReplies (IntPtr replyBuffer, uint replySize);
[DllImport (IPHLPAPI, SetLastError=true)]
internal unsafe extern static uint Icmp6ParseReplies (IntPtr replyBuffer, uint replySize);
// [DllImport(IPHLPAPI)]
// internal extern static uint NotifyAddrChange(uint nullhandle,uint nulloverlapped);
// [DllImport(IPHLPAPI)]
// internal extern static uint NotifyRouteChange(uint nullhandle,uint nulloverlapped);
}
[
System.Security.SuppressUnmanagedCodeSecurityAttribute()
]
internal static class UnsafeIcmpNativeMethods {
private const string ICMP = "icmp.dll";
[DllImport(ICMP, SetLastError=true)]
internal extern static SafeCloseIcmpHandle IcmpCreateFile();
[DllImport (ICMP, SetLastError=true)]
internal extern static bool IcmpCloseHandle(IntPtr icmpHandle);
[DllImport (ICMP, SetLastError=true)]
internal extern static uint IcmpSendEcho2 (SafeCloseIcmpHandle icmpHandle, SafeWaitHandle Event, IntPtr apcRoutine, IntPtr apcContext,
uint ipAddress, [In] SafeLocalFree data, ushort dataSize, ref IPOptions options, SafeLocalFree replyBuffer, uint replySize, uint timeout);
[DllImport (ICMP, SetLastError=true)]
internal extern static uint IcmpSendEcho2 (SafeCloseIcmpHandle icmpHandle, IntPtr Event, IntPtr apcRoutine, IntPtr apcContext,
uint ipAddress, [In] SafeLocalFree data, ushort dataSize, ref IPOptions options, SafeLocalFree replyBuffer, uint replySize, uint timeout);
[DllImport (ICMP, SetLastError=true)]
internal unsafe extern static uint IcmpParseReplies (IntPtr replyBuffer, uint replySize);
}
[
System.Security.SuppressUnmanagedCodeSecurityAttribute()
]
internal static class UnsafeWinINetNativeMethods {
private const string WININET = "wininet.dll";
[DllImport (WININET)]
internal extern static bool InternetGetConnectedState(ref uint flags, uint dwReserved);
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
namespace System.Net.NetworkInformation {
using System;
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Threading;
using System.Security;
using System.Runtime.CompilerServices;
using System.Security.Permissions;
using System.ComponentModel;
using System.Text;
using Microsoft.Win32.SafeHandles;
internal class IpHelperErrors {
internal const uint Success = 0;
internal const uint ErrorInvalidFunction = 1;
internal const uint ErrorNoSuchDevice = 2;
internal const uint ErrorInvalidData= 13;
internal const uint ErrorInvalidParameter = 87;
internal const uint ErrorBufferOverflow = 111;
internal const uint ErrorInsufficientBuffer = 122;
internal const uint ErrorNoData= 232;
internal const uint Pending = 997;
internal const uint ErrorNotFound = 1168;
internal static void CheckFamilyUnspecified(AddressFamily family)
{
if (family != AddressFamily.InterNetwork && family != AddressFamily.InterNetworkV6
&& family != AddressFamily.Unspecified) {
throw new ArgumentException(SR.GetString(SR.net_invalidversion), "family");
}
}
}
internal enum OldInterfaceType{Unknown=0,Ethernet=6,TokenRing=9,Fddi=15,Ppp=23,Loopback=24,Slip=28};
//
// Per-adapter Flags
//
[Flags]
internal enum AdapterFlags {
DnsEnabled= 0x01,
RegisterAdapterSuffix= 0x02,
DhcpEnabled = 0x04,
ReceiveOnly = 0x08,
NoMulticast= 0x10,
Ipv6OtherStatefulConfig= 0x20
};
[Flags]
internal enum AdapterAddressFlags{
DnsEligible = 0x1,
Transient = 0x2
}
internal enum OldOperationalStatus{
NonOperational =0,
Unreachable =1,
Disconnected =2,
Connecting =3,
Connected =4,
Operational =5
}
[Flags]
internal enum GetAdaptersAddressesFlags
{
SkipUnicast = 0x0001,
SkipAnycast = 0x0002,
SkipMulticast = 0x0004,
SkipDnsServer = 0x0008,
IncludePrefix = 0x0010,
SkipFriendlyName = 0x0020,
}
internal struct IPExtendedAddress{
internal IPAddress mask;
internal IPAddress address;
internal IPExtendedAddress(IPAddress address, IPAddress mask){
this.address = address;
this.mask = mask;
}
}
///
/// IpAddressList - store an IP address with its corresponding subnet mask,
/// both as dotted decimal strings
///
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]
internal struct IpAddrString {
internal IntPtr Next; /* struct _IpAddressList* */
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=16)]
internal string IpAddress;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=16)]
internal string IpMask;
internal uint Context;
//helper method to parse the ipaddresses
internal IPAddressCollection ToIPAddressCollection() {
IpAddrString addr = this;
IPAddressCollection addresslist = new IPAddressCollection();
if (addr.IpAddress.Length != 0)
addresslist.InternalAdd(IPAddress.Parse(addr.IpAddress));
while ( addr.Next != IntPtr.Zero ) {
addr = (IpAddrString)Marshal.PtrToStructure(addr.Next,typeof(IpAddrString));
if (addr.IpAddress.Length != 0)
addresslist.InternalAdd(IPAddress.Parse(addr.IpAddress));
}
return addresslist;
}
internal ArrayList ToIPExtendedAddressArrayList() {
IpAddrString addr = this;
ArrayList addresslist = new ArrayList();
if (addr.IpAddress.Length != 0)
addresslist.Add(new IPExtendedAddress(IPAddress.Parse(addr.IpAddress),IPAddress.Parse(addr.IpMask)));
while ( addr.Next != IntPtr.Zero ) {
addr = (IpAddrString)Marshal.PtrToStructure(addr.Next,typeof(IpAddrString));
if (addr.IpAddress.Length != 0)
addresslist.Add(new IPExtendedAddress(IPAddress.Parse(addr.IpAddress),IPAddress.Parse(addr.IpMask)));
}
return addresslist;
}
internal GatewayIPAddressInformationCollection ToIPGatewayAddressCollection() {
IpAddrString addr = this;
GatewayIPAddressInformationCollection addresslist = new GatewayIPAddressInformationCollection();
if (addr.IpAddress.Length != 0)
addresslist.InternalAdd(new SystemGatewayIPAddressInformation(IPAddress.Parse(addr.IpAddress)));
while ( addr.Next != IntPtr.Zero ) {
addr = (IpAddrString)Marshal.PtrToStructure(addr.Next,typeof(IpAddrString));
if (addr.IpAddress.Length != 0)
addresslist.InternalAdd(new SystemGatewayIPAddressInformation(IPAddress.Parse(addr.IpAddress)));
}
return addresslist;
}
};
internal struct IPAddressInfo{
/* Consider Removing
internal IPAddressInfo(IPAddress addr, IPAddress mask, uint context){
this.addr = addr;
this.mask = mask;
this.context = context;
}
*/
internal IPAddress addr;
internal IPAddress mask;
internal uint context;
}
///
/// Core network information.
///
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]
internal struct FIXED_INFO {
internal const int MAX_HOSTNAME_LEN = 128;
internal const int MAX_DOMAIN_NAME_LEN = 128;
internal const int MAX_SCOPE_ID_LEN = 256;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=MAX_HOSTNAME_LEN + 4)]
internal string hostName;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=MAX_DOMAIN_NAME_LEN + 4)]
internal string domainName;
internal uint currentDnsServer; /* IpAddressList* */
internal IpAddrString DnsServerList;
internal NetBiosNodeType nodeType;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=MAX_SCOPE_ID_LEN + 4)]
internal string scopeId;
internal bool enableRouting;
internal bool enableProxy;
internal bool enableDns;
};
///
/// ADAPTER_INFO - per-adapter information. All IP addresses are stored as
/// strings
///
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]
internal struct IpAdapterInfo {
internal const int MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
internal const int MAX_ADAPTER_NAME_LENGTH = 256;
internal const int MAX_ADAPTER_ADDRESS_LENGTH = 8;
internal IntPtr /* struct _IP_ADAPTER_INFO* */ Next;
internal uint comboIndex;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=MAX_ADAPTER_NAME_LENGTH + 4)]
internal String adapterName;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=MAX_ADAPTER_DESCRIPTION_LENGTH + 4)]
internal String description;
internal uint addressLength;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=MAX_ADAPTER_ADDRESS_LENGTH)]
internal byte[] address;
internal uint index;
internal OldInterfaceType type;
internal bool dhcpEnabled;
internal IntPtr currentIpAddress; /* IpAddressList* */
internal IpAddrString ipAddressList;
internal IpAddrString gatewayList;
internal IpAddrString dhcpServer;
[MarshalAs(UnmanagedType.Bool)]
internal bool haveWins;
internal IpAddrString primaryWinsServer;
internal IpAddrString secondaryWinsServer;
internal uint/*time_t*/ leaseObtained;
internal uint/*time_t*/ leaseExpires;
};
[StructLayout(LayoutKind.Sequential)]
internal struct IpSocketAddress {
internal IntPtr address;
internal int addressLength;
}
// IP_ADAPTER_ANYCAST_ADDRESS
// IP_ADAPTER_MULTICAST_ADDRESS
// IP_ADAPTER_DNS_SERVER_ADDRESS
[StructLayout(LayoutKind.Sequential)]
internal struct IpAdapterAddress {
internal uint length;
internal AdapterAddressFlags flags;
internal IntPtr next;
internal IpSocketAddress address;
}
[StructLayout(LayoutKind.Sequential)]
internal struct IpAdapterUnicastAddress {
internal uint length;
internal AdapterAddressFlags flags;
internal IntPtr next;
internal IpSocketAddress address;
internal PrefixOrigin prefixOrigin;
internal SuffixOrigin suffixOrigin;
internal DuplicateAddressDetectionState dadState;
internal uint validLifetime;
internal uint preferredLifetime;
internal uint leaseLifetime;
}
[StructLayout(LayoutKind.Sequential)]
internal struct IpAdapterPrefix {
internal uint length;
internal uint ifIndex;
internal IntPtr next;
internal IpSocketAddress address;
internal uint prefixLength;
}
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode)]
internal struct IpAdapterAddresses{
internal const int MAX_ADAPTER_ADDRESS_LENGTH = 8;
internal uint length;
internal uint index;
internal IntPtr next;
//needs to be ansi
[MarshalAs(UnmanagedType.LPStr)]
internal string AdapterName;
internal IntPtr FirstUnicastAddress;
internal IntPtr FirstAnycastAddress;
internal IntPtr FirstMulticastAddress;
internal IntPtr FirstDnsServerAddress;
internal string dnsSuffix;
internal string description;
internal string friendlyName;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=MAX_ADAPTER_ADDRESS_LENGTH)]
internal byte[] address;
internal uint addressLength;
internal AdapterFlags flags;
internal uint mtu;
internal NetworkInterfaceType type;
internal OperationalStatus operStatus;
internal uint ipv6Index;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=16)]
internal uint[] zoneIndices; //16
internal IntPtr firstPrefix;
}
///
/// IP_PER_ADAPTER_INFO - per-adapter IP information such as DNS server list.
///
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]
internal struct IpPerAdapterInfo {
internal bool autoconfigEnabled;
internal bool autoconfigActive;
internal IntPtr currentDnsServer; /* IpAddressList* */
internal IpAddrString dnsServerList;
};
///
/// Network Interface information.
///
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode)]
internal struct MibIfRow {
//
// Definitions and structures used by getnetworkparams and getadaptersinfo apis
//
// internal const uint DEFAULT_MINIMUM_ENTITIES = 32;
internal const int MAX_INTERFACE_NAME_LEN = 256;
internal const int MAXLEN_IFDESCR = 256;
internal const int MAXLEN_PHYSADDR = 8;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=MAX_INTERFACE_NAME_LEN)]
internal string wszName;
internal uint dwIndex;
internal uint dwType;
internal uint dwMtu;
internal uint dwSpeed;
internal uint dwPhysAddrLen;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=MAXLEN_PHYSADDR)]
internal byte[] bPhysAddr;
internal uint dwAdminStatus;
internal OldOperationalStatus operStatus;
internal uint dwLastChange;
internal uint dwInOctets;
internal uint dwInUcastPkts;
internal uint dwInNUcastPkts;
internal uint dwInDiscards;
internal uint dwInErrors;
internal uint dwInUnknownProtos;
internal uint dwOutOctets;
internal uint dwOutUcastPkts;
internal uint dwOutNUcastPkts;
internal uint dwOutDiscards;
internal uint dwOutErrors;
internal uint dwOutQLen;
internal uint dwDescrLen;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=MAXLEN_IFDESCR)]
internal byte[] bDescr;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibUdpStats {
internal uint datagramsReceived;
internal uint incomingDatagramsDiscarded;
internal uint incomingDatagramsWithErrors;
internal uint datagramsSent;
internal uint udpListeners;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibTcpStats {
internal uint reTransmissionAlgorithm;
internal uint minimumRetransmissionTimeOut;
internal uint maximumRetransmissionTimeOut;
internal uint maximumConnections;
internal uint activeOpens;
internal uint passiveOpens;
internal uint failedConnectionAttempts;
internal uint resetConnections;
internal uint currentConnections;
internal uint segmentsReceived;
internal uint segmentsSent;
internal uint segmentsResent;
internal uint errorsReceived;
internal uint segmentsSentWithReset;
internal uint cumulativeConnections;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibIpStats {
internal bool forwardingEnabled;
internal uint defaultTtl;
internal uint packetsReceived;
internal uint receivedPacketsWithHeaderErrors;
internal uint receivedPacketsWithAddressErrors;
internal uint packetsForwarded;
internal uint receivedPacketsWithUnknownProtocols;
internal uint receivedPacketsDiscarded;
internal uint receivedPacketsDelivered;
internal uint packetOutputRequests;
internal uint outputPacketRoutingDiscards;
internal uint outputPacketsDiscarded;
internal uint outputPacketsWithNoRoute;
internal uint packetReassemblyTimeout;
internal uint packetsReassemblyRequired;
internal uint packetsReassembled;
internal uint packetsReassemblyFailed;
internal uint packetsFragmented;
internal uint packetsFragmentFailed;
internal uint packetsFragmentCreated;
internal uint interfaces;
internal uint ipAddresses;
internal uint routes;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibIcmpInfo {
internal MibIcmpStats inStats;
internal MibIcmpStats outStats;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibIcmpStats {
internal uint messages;
internal uint errors;
internal uint destinationUnreachables;
internal uint timeExceeds;
internal uint parameterProblems;
internal uint sourceQuenches;
internal uint redirects;
internal uint echoRequests;
internal uint echoReplies;
internal uint timestampRequests;
internal uint timestampReplies;
internal uint addressMaskRequests;
internal uint addressMaskReplies;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibIcmpInfoEx {
internal MibIcmpStatsEx inStats;
internal MibIcmpStatsEx outStats;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibIcmpStatsEx {
internal uint dwMsgs;
internal uint dwErrors;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=256)]
internal uint[] rgdwTypeCount;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibTcpTable {
internal uint numberOfEntries;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibTcpRow {
internal TcpState state;
internal uint localAddr;
internal byte localPort1;
internal byte localPort2;
internal byte localPort3;
internal byte localPort4;
internal uint remoteAddr;
internal byte remotePort1;
internal byte remotePort2;
internal byte remotePort3;
internal byte remotePort4;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibUdpTable {
internal uint numberOfEntries;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MibUdpRow {
internal uint localAddr;
internal byte localPort1;
internal byte localPort2;
internal byte localPort3;
internal byte localPort4;
}
[StructLayout(LayoutKind.Sequential)]
internal struct IPOptions {
internal byte ttl;
internal byte tos;
internal byte flags;
internal byte optionsSize;
internal IntPtr optionsData;
internal IPOptions (PingOptions options)
{
ttl = 128;
tos = 0;
flags = 0;
optionsSize = 0;
optionsData = IntPtr.Zero;
if (options != null) {
this.ttl = (byte)options.Ttl;
if (options.DontFragment){
flags = 2;
}
}
}
}
[StructLayout(LayoutKind.Sequential)]
internal struct IcmpEchoReply {
internal uint address;
internal uint status;
internal uint roundTripTime;
internal ushort dataSize;
internal ushort reserved;
internal IntPtr data;
internal IPOptions options;
}
/*
[StructLayout(LayoutKind.Sequential)]
internal struct Ipv6Address {
ushort sin6_port;
uint sin6_flowinfo;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=16)]
byte[] sin6_addr;
uint sin6_scope_id;
} */
[StructLayout(LayoutKind.Sequential, Pack=1)]
internal struct Ipv6Address {
[MarshalAs(UnmanagedType.ByValArray,SizeConst=6)]
internal byte[] Goo;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=16)]
internal byte[] Address; // Replying address.
internal uint ScopeID;
}
[StructLayout(LayoutKind.Sequential)]
internal struct Icmp6EchoReply {
internal Ipv6Address Address;
internal uint Status; // Reply IP_STATUS.
internal uint RoundTripTime; // RTT in milliseconds.
internal IntPtr data;
// internal IPOptions options;
// internal IntPtr data; data os after tjos
}
/*
[StructLayout(LayoutKind.Sequential)]
internal struct Ipv6Address {
ushort sin6_port;
uint sin6_flowinfo;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=16)]
byte[] sin6_addr;
uint sin6_scope_id;
} */
// Reply data follows this structure in memory.
///
/// Wrapper for API's in iphlpapi.dll
///
[
System.Security.SuppressUnmanagedCodeSecurityAttribute()
]
internal static class UnsafeNetInfoNativeMethods {
private const string IPHLPAPI = "iphlpapi.dll";
[DllImport(IPHLPAPI)]
internal extern static uint GetAdaptersInfo(SafeLocalFree pAdapterInfo,ref uint pOutBufLen);
[DllImport(IPHLPAPI)]
internal extern static uint GetAdaptersAddresses(
AddressFamily family,
uint flags,
IntPtr pReserved,
SafeLocalFree adapterAddresses,
ref uint outBufLen);
[DllImport(IPHLPAPI)]
internal extern static uint GetBestInterface(int ipAddress, out int index);
/*
// Consider removing.
[DllImport(IPHLPAPI)]
internal extern static uint GetBestInterfaceEx(byte[] ipAddress, out int index);
*/
[DllImport(IPHLPAPI)]
internal extern static uint GetIfEntry(ref MibIfRow pIfRow);
[DllImport(IPHLPAPI)]
internal extern static uint GetIpStatistics(out MibIpStats statistics);
[DllImport(IPHLPAPI)]
internal extern static uint GetIpStatisticsEx(out MibIpStats statistics, AddressFamily family);
[DllImport(IPHLPAPI)]
internal extern static uint GetTcpStatistics(out MibTcpStats statistics);
[DllImport(IPHLPAPI)]
internal extern static uint GetTcpStatisticsEx(out MibTcpStats statistics, AddressFamily family);
[DllImport(IPHLPAPI)]
internal extern static uint GetUdpStatistics(out MibUdpStats statistics);
[DllImport(IPHLPAPI)]
internal extern static uint GetUdpStatisticsEx(out MibUdpStats statistics, AddressFamily family);
[DllImport(IPHLPAPI)]
internal extern static uint GetIcmpStatistics(out MibIcmpInfo statistics);
[DllImport(IPHLPAPI)]
internal extern static uint GetIcmpStatisticsEx(out MibIcmpInfoEx statistics,AddressFamily family);
[DllImport(IPHLPAPI)]
internal extern static uint GetTcpTable(SafeLocalFree pTcpTable,ref uint dwOutBufLen, bool order);
[DllImport(IPHLPAPI)]
internal extern static uint GetUdpTable(SafeLocalFree pUdpTable,ref uint dwOutBufLen, bool order);
// [DllImport(IPHLPAPI)]
// internal extern static uint GetInterfaceInfo(IntPtr pIfTable,ref uint dwOutBufLen);
// [DllImport(IPHLPAPI)]
// internal extern static uint GetIpAddrTable(SafeLocalFree pIpAddrTable, ref uint dwOutBufLen, bool order);
[DllImport(IPHLPAPI)]
internal extern static uint GetNetworkParams(SafeLocalFree pFixedInfo,ref uint pOutBufLen);
// [DllImport(IPHLPAPI)]
// internal extern static uint GetNumberOfInterfaces(out uint pdwNumIf);
[DllImport(IPHLPAPI)]
internal extern static uint GetPerAdapterInfo(uint IfIndex,SafeLocalFree pPerAdapterInfo,ref uint pOutBufLen);
/* Consider Removing
[DllImport(IPHLPAPI)]
unsafe internal extern static uint NotifyAddrChange(out IntPtr waithandle, [In] NativeOverlapped *overlapped);
*/
[DllImport(IPHLPAPI, SetLastError=true)]
internal extern static SafeCloseIcmpHandle IcmpCreateFile();
[DllImport (IPHLPAPI, SetLastError=true)]
internal extern static SafeCloseIcmpHandle Icmp6CreateFile ();
[DllImport (IPHLPAPI, SetLastError=true)]
internal extern static bool IcmpCloseHandle(IntPtr handle);
// [DllImport(IPHLPAPI)]
// internal extern static uint GetBestInterface(uint address4, out uint bestIfIndex);
[DllImport (IPHLPAPI, SetLastError=true)]
internal extern static uint IcmpSendEcho2 (SafeCloseIcmpHandle icmpHandle, SafeWaitHandle Event, IntPtr apcRoutine, IntPtr apcContext,
uint ipAddress, [In] SafeLocalFree data, ushort dataSize, ref IPOptions options, SafeLocalFree replyBuffer, uint replySize, uint timeout);
[DllImport (IPHLPAPI, SetLastError=true)]
internal extern static uint IcmpSendEcho2 (SafeCloseIcmpHandle icmpHandle, IntPtr Event, IntPtr apcRoutine, IntPtr apcContext,
uint ipAddress, [In] SafeLocalFree data, ushort dataSize, ref IPOptions options, SafeLocalFree replyBuffer, uint replySize, uint timeout);
[DllImport (IPHLPAPI, SetLastError=true)]
internal extern static uint Icmp6SendEcho2 (SafeCloseIcmpHandle icmpHandle, SafeWaitHandle Event, IntPtr apcRoutine, IntPtr apcContext,
byte[] sourceSocketAddress, byte[] destSocketAddress, [In] SafeLocalFree data, ushort dataSize, ref IPOptions options, SafeLocalFree replyBuffer, uint replySize, uint timeout);
[DllImport (IPHLPAPI, SetLastError=true)]
internal extern static uint Icmp6SendEcho2 (SafeCloseIcmpHandle icmpHandle, IntPtr Event, IntPtr apcRoutine, IntPtr apcContext,
byte[] sourceSocketAddress, byte[] destSocketAddress, [In] SafeLocalFree data, ushort dataSize, ref IPOptions options, SafeLocalFree replyBuffer, uint replySize, uint timeout);
[DllImport (IPHLPAPI, SetLastError=true)]
internal unsafe extern static uint IcmpParseReplies (IntPtr replyBuffer, uint replySize);
[DllImport (IPHLPAPI, SetLastError=true)]
internal unsafe extern static uint Icmp6ParseReplies (IntPtr replyBuffer, uint replySize);
// [DllImport(IPHLPAPI)]
// internal extern static uint NotifyAddrChange(uint nullhandle,uint nulloverlapped);
// [DllImport(IPHLPAPI)]
// internal extern static uint NotifyRouteChange(uint nullhandle,uint nulloverlapped);
}
[
System.Security.SuppressUnmanagedCodeSecurityAttribute()
]
internal static class UnsafeIcmpNativeMethods {
private const string ICMP = "icmp.dll";
[DllImport(ICMP, SetLastError=true)]
internal extern static SafeCloseIcmpHandle IcmpCreateFile();
[DllImport (ICMP, SetLastError=true)]
internal extern static bool IcmpCloseHandle(IntPtr icmpHandle);
[DllImport (ICMP, SetLastError=true)]
internal extern static uint IcmpSendEcho2 (SafeCloseIcmpHandle icmpHandle, SafeWaitHandle Event, IntPtr apcRoutine, IntPtr apcContext,
uint ipAddress, [In] SafeLocalFree data, ushort dataSize, ref IPOptions options, SafeLocalFree replyBuffer, uint replySize, uint timeout);
[DllImport (ICMP, SetLastError=true)]
internal extern static uint IcmpSendEcho2 (SafeCloseIcmpHandle icmpHandle, IntPtr Event, IntPtr apcRoutine, IntPtr apcContext,
uint ipAddress, [In] SafeLocalFree data, ushort dataSize, ref IPOptions options, SafeLocalFree replyBuffer, uint replySize, uint timeout);
[DllImport (ICMP, SetLastError=true)]
internal unsafe extern static uint IcmpParseReplies (IntPtr replyBuffer, uint replySize);
}
[
System.Security.SuppressUnmanagedCodeSecurityAttribute()
]
internal static class UnsafeWinINetNativeMethods {
private const string WININET = "wininet.dll";
[DllImport (WININET)]
internal extern static bool InternetGetConnectedState(ref uint flags, uint dwReserved);
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Zone.cs
- ConstraintStruct.cs
- cryptoapiTransform.cs
- AsymmetricSecurityProtocolFactory.cs
- AssemblyUtil.cs
- XmlSchemaGroupRef.cs
- SpeechRecognizer.cs
- XamlSerializerUtil.cs
- streamingZipPartStream.cs
- BindingList.cs
- BuildProvider.cs
- columnmapkeybuilder.cs
- ToolStripHighContrastRenderer.cs
- FontCollection.cs
- ServiceOperationWrapper.cs
- SimpleBitVector32.cs
- BindingExpressionUncommonField.cs
- FileSystemInfo.cs
- VirtualPath.cs
- FolderBrowserDialog.cs
- TableLayoutCellPaintEventArgs.cs
- HwndProxyElementProvider.cs
- LoginViewDesigner.cs
- PolicyFactory.cs
- CreateRefExpr.cs
- RegisteredExpandoAttribute.cs
- OverrideMode.cs
- Matrix3DValueSerializer.cs
- Thickness.cs
- DrawingAttributeSerializer.cs
- SystemSounds.cs
- WebBrowserUriTypeConverter.cs
- MyContact.cs
- FixedSOMTableRow.cs
- FormClosedEvent.cs
- VersionConverter.cs
- DiscoveryClientDocuments.cs
- DetailsViewUpdatedEventArgs.cs
- SmiEventSink.cs
- NavigationService.cs
- XsltOutput.cs
- Invariant.cs
- ControlAdapter.cs
- EmptyEnumerator.cs
- RijndaelManagedTransform.cs
- DeclarationUpdate.cs
- AuthenticationService.cs
- SerialReceived.cs
- Hex.cs
- CustomBindingElement.cs
- BevelBitmapEffect.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- Lasso.cs
- EditCommandColumn.cs
- SetterTriggerConditionValueConverter.cs
- Mouse.cs
- CustomAttributeFormatException.cs
- ListDictionaryInternal.cs
- ThreadStartException.cs
- securitycriticaldataformultiplegetandset.cs
- QuaternionRotation3D.cs
- ControlBuilderAttribute.cs
- MethodBuilderInstantiation.cs
- CharacterMetrics.cs
- XPathNodeIterator.cs
- QuaternionConverter.cs
- PagesSection.cs
- ImageCodecInfo.cs
- TypefaceCollection.cs
- FieldNameLookup.cs
- UnsafeNativeMethods.cs
- ComAdminInterfaces.cs
- ToolStripGrip.cs
- Debug.cs
- EntityDataSourceState.cs
- IpcManager.cs
- BlockUIContainer.cs
- SortAction.cs
- XmlSchemaExternal.cs
- ConnectionPointGlyph.cs
- XmlObjectSerializerReadContextComplexJson.cs
- TypeSystemHelpers.cs
- xmlglyphRunInfo.cs
- CharacterHit.cs
- ObjectTypeMapping.cs
- MediaSystem.cs
- WebColorConverter.cs
- StandardBindingCollectionElement.cs
- WebResponse.cs
- MimeMapping.cs
- InvalidCastException.cs
- BasicCellRelation.cs
- DoubleAnimation.cs
- Registry.cs
- XmlArrayItemAttribute.cs
- ZipIOCentralDirectoryFileHeader.cs
- XpsPackagingPolicy.cs
- CharacterBufferReference.cs
- WebPartUtil.cs
- CurrentTimeZone.cs