Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Net / System / Net / NetworkInformation / UnsafeNetInfoNativeMethods.cs / 1305376 / UnsafeNetInfoNativeMethods.cs
namespace System.Net.NetworkInformation { using System; using System.Collections; using System.Net; using System.Net.Sockets; using System.Runtime.InteropServices; using System.Runtime.ConstrainedExecution; 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; // Ports are only 16 bit values (in network WORD order, 3,4,1,2). // There are reports where the high order bytes have garbage in them. internal byte ignoreLocalPort3; internal byte ignoreLocalPort4; internal uint remoteAddr; internal byte remotePort1; internal byte remotePort2; // Ports are only 16 bit values (in network WORD order, 3,4,1,2). // There are reports where the high order bytes have garbage in them. internal byte ignoreRemotePort3; internal byte ignoreRemotePort4; } [StructLayout(LayoutKind.Sequential)] internal struct MibTcp6TableOwnerPid { internal uint numberOfEntries; } [StructLayout(LayoutKind.Sequential)] internal struct MibTcp6RowOwnerPid { [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] internal byte[] localAddr; internal uint localScopeId; internal byte localPort1; internal byte localPort2; // Ports are only 16 bit values (in network WORD order, 3,4,1,2). // There are reports where the high order bytes have garbage in them. internal byte ignoreLocalPort3; internal byte ignoreLocalPort4; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] internal byte[] remoteAddr; internal uint remoteScopeId; internal byte remotePort1; internal byte remotePort2; // Ports are only 16 bit values (in network WORD order, 3,4,1,2). // There are reports where the high order bytes have garbage in them. internal byte ignoreRemotePort3; internal byte ignoreRemotePort4; internal TcpState state; internal uint owningPid; } internal enum TcpTableClass { TcpTableBasicListener = 0, TcpTableBasicConnections = 1, TcpTableBasicAll = 2, TcpTableOwnerPidListener = 3, TcpTableOwnerPidConnections = 4, TcpTableOwnerPidAll = 5, TcpTableOwnerModuleListener = 6, TcpTableOwnerModuleConnections = 7, TcpTableOwnerModuleAll = 8 } [StructLayout(LayoutKind.Sequential)] internal struct MibUdpTable { internal uint numberOfEntries; } [StructLayout(LayoutKind.Sequential)] internal struct MibUdpRow { internal uint localAddr; internal byte localPort1; internal byte localPort2; // Ports are only 16 bit values (in network WORD order, 3,4,1,2). // There are reports where the high order bytes have garbage in them. internal byte ignoreLocalPort3; internal byte ignoreLocalPort4; } internal enum UdpTableClass { UdpTableBasic = 0, UdpTableOwnerPid = 1, UdpTableOwnerModule = 2 } [StructLayout(LayoutKind.Sequential)] internal struct MibUdp6TableOwnerPid { internal uint numberOfEntries; } [StructLayout(LayoutKind.Sequential)] internal struct MibUdp6RowOwnerPid { [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] internal byte[] localAddr; internal uint localScopeId; internal byte localPort1; internal byte localPort2; // Ports are only 16 bit values (in network WORD order, 3,4,1,2). // There are reports where the high order bytes have garbage in them. internal byte ignoreLocalPort3; internal byte ignoreLocalPort4; internal uint owningPid; } [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 } internal delegate void StableUnicastIpAddressTableDelegate(IntPtr context, IntPtr table); /* [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 GetExtendedTcpTable(SafeLocalFree pTcpTable, ref uint dwOutBufLen, bool order, uint IPVersion, TcpTableClass tableClass, uint reserved); [DllImport(IPHLPAPI)] internal extern static uint GetUdpTable(SafeLocalFree pUdpTable, ref uint dwOutBufLen, bool order); [DllImport(IPHLPAPI)] internal extern static uint GetExtendedUdpTable(SafeLocalFree pUdpTable, ref uint dwOutBufLen, bool order, uint IPVersion, UdpTableClass tableClass, uint reserved); // [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)] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] internal static extern void FreeMibTable(IntPtr handle); [DllImport(IPHLPAPI)] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] internal static extern uint CancelMibChangeNotify2(IntPtr notificationHandle); [DllImport(IPHLPAPI)] internal static extern uint NotifyStableUnicastIpAddressTable( [In] AddressFamily addressFamily, [Out] out SafeFreeMibTable table, [MarshalAs(UnmanagedType.FunctionPtr)][In] StableUnicastIpAddressTableDelegate callback, [In] IntPtr context, [Out] out SafeCancelMibChangeNotify notificationHandle); // [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 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
- DrawingAttributes.cs
- DataTable.cs
- EnumDataContract.cs
- handlecollector.cs
- ToolTipService.cs
- COM2TypeInfoProcessor.cs
- FormsAuthenticationUser.cs
- SponsorHelper.cs
- GroupItem.cs
- SwitchElementsCollection.cs
- ProfileModule.cs
- BindableAttribute.cs
- SamlNameIdentifierClaimResource.cs
- SoapTypeAttribute.cs
- GenericWebPart.cs
- BuildProviderUtils.cs
- x509store.cs
- StoreContentChangedEventArgs.cs
- SQLDoubleStorage.cs
- UnsafeNativeMethods.cs
- GridViewItemAutomationPeer.cs
- Color.cs
- SHA384Managed.cs
- DataGridViewComboBoxColumn.cs
- PropertyBuilder.cs
- TdsValueSetter.cs
- CookielessHelper.cs
- ApplicationCommands.cs
- DataKeyCollection.cs
- HttpProcessUtility.cs
- MemberPath.cs
- WebReferenceCollection.cs
- RenderTargetBitmap.cs
- CodeIterationStatement.cs
- CryptoConfig.cs
- StdRegProviderWrapper.cs
- WebPartConnectionsCancelVerb.cs
- ApplicationSettingsBase.cs
- SmiEventStream.cs
- Quad.cs
- WindowsEditBoxRange.cs
- BaseAsyncResult.cs
- SingleObjectCollection.cs
- ErrorCodes.cs
- AttributeAction.cs
- CodeTypeReference.cs
- XsltException.cs
- XmlSchemaInferenceException.cs
- OLEDB_Enum.cs
- FrameworkContextData.cs
- WindowsContainer.cs
- XmlConvert.cs
- EntityContainerEmitter.cs
- Win32Native.cs
- GPPOINTF.cs
- LoginName.cs
- ConversionValidationRule.cs
- DataServiceRequestException.cs
- PartialCachingControl.cs
- PartDesigner.cs
- CodeExporter.cs
- EntityDataSourceContextCreatedEventArgs.cs
- Int64AnimationUsingKeyFrames.cs
- Completion.cs
- XPathPatternParser.cs
- PersonalizablePropertyEntry.cs
- AccessorTable.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- BrowsableAttribute.cs
- XmlSchemaNotation.cs
- DeploymentSection.cs
- RadioButton.cs
- TableNameAttribute.cs
- ViewBase.cs
- _RequestLifetimeSetter.cs
- PreparingEnlistment.cs
- DataListComponentEditor.cs
- TrackingParameters.cs
- UserControl.cs
- BitmapVisualManager.cs
- PageParserFilter.cs
- SqlNodeTypeOperators.cs
- WebPartZoneCollection.cs
- PersonalizationStateInfo.cs
- SafeNativeMethods.cs
- FontStyle.cs
- BulletedList.cs
- XmlSortKey.cs
- GridViewRowEventArgs.cs
- Bold.cs
- HebrewNumber.cs
- InputLanguageCollection.cs
- Panel.cs
- AssociatedControlConverter.cs
- TextOutput.cs
- LineSegment.cs
- PointAnimation.cs
- DateTimeUtil.cs
- SafeWaitHandle.cs
- BufferedWebEventProvider.cs