2019-04-18 22:39:42 -04:00
|
|
|
|
using System;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
using Vanara.InteropServices;
|
|
|
|
|
using static Vanara.PInvoke.Ws2_32;
|
2019-04-24 10:37:19 -04:00
|
|
|
|
using FILETIME = System.Runtime.InteropServices.ComTypes.FILETIME;
|
2019-04-18 22:39:42 -04:00
|
|
|
|
|
|
|
|
|
namespace Vanara.PInvoke
|
|
|
|
|
{
|
|
|
|
|
public static partial class IpHlpApi
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>The <c>TCP_CONNECTION_OFFLOAD_STATE</c> enumeration defines the possible TCP offload states for a TCP connection.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>The <c>TCP_CONNECTION_OFFLOAD_STATE</c> enumeration is defined on Windows Server 2003 and later.</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// On the Microsoft Windows Software Development Kit (SDK) released for Windows Vista and later, the organization of header files
|
|
|
|
|
/// has changed and the <c>TCP_CONNECTION_OFFLOAD_STATE</c> enumeration is defined in the Tcpmib.h header file not in the Iprtrmib.h
|
|
|
|
|
/// header file. Note that the Tcpmib.h header file is automatically included in Iprtrmib.h which is automatically included in the
|
|
|
|
|
/// Iphlpapi.h header file. The Tcpmib.h and Iprtrmib.h header files should never be used directly.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/api/tcpmib/ne-tcpmib-tcp_connection_offload_state typedef enum
|
|
|
|
|
// TCP_CONNECTION_OFFLOAD_STATE { TcpConnectionOffloadStateInHost , TcpConnectionOffloadStateOffloading ,
|
|
|
|
|
// TcpConnectionOffloadStateOffloaded , TcpConnectionOffloadStateUploading , TcpConnectionOffloadStateMax } *PTCP_CONNECTION_OFFLOAD_STATE;
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "cef633e7-1577-4f10-bd14-8d8e85aa78e6")]
|
|
|
|
|
public enum TCP_CONNECTION_OFFLOAD_STATE
|
|
|
|
|
{
|
|
|
|
|
/// <summary>The TCP connection is currently owned by the network stack on the local computer, and is not offloaded</summary>
|
|
|
|
|
TcpConnectionOffloadStateInHost = 0,
|
|
|
|
|
|
|
|
|
|
/// <summary>The TCP connection is in the process of being offloaded, but the offload has not been completed.</summary>
|
|
|
|
|
TcpConnectionOffloadStateOffloading,
|
|
|
|
|
|
|
|
|
|
/// <summary>The TCP connection is offloaded to the network interface controller.</summary>
|
|
|
|
|
TcpConnectionOffloadStateOffloaded,
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// The TCP connection is in the process of being uploaded back to the network stack on the local computer, but the
|
|
|
|
|
/// reinstate-to-host process has not completed.
|
|
|
|
|
/// </summary>
|
|
|
|
|
TcpConnectionOffloadStateUploading,
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// The maximum possible value for the TCP_CONNECTION_OFFLOAD_STATE enumeration type. This is not a legal value for the possible
|
|
|
|
|
/// TCP connection offload state.
|
|
|
|
|
/// </summary>
|
|
|
|
|
TcpConnectionOffloadStateMax,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>The TCP_RTO_ALGORITHM enumerates different TCP retransmission time-out algorithms.</summary>
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "cc669306")]
|
|
|
|
|
public enum TCP_RTO_ALGORITHM
|
|
|
|
|
{
|
|
|
|
|
/// <summary>Other.</summary>
|
|
|
|
|
TcpRtoAlgorithmOther = 1,
|
|
|
|
|
|
|
|
|
|
/// <summary>Constant time-out.</summary>
|
|
|
|
|
TcpRtoAlgorithmConstant = 2,
|
|
|
|
|
|
|
|
|
|
/// <summary>MIL-STD-1778. See [RFC4022].</summary>
|
|
|
|
|
TcpRtoAlgorithmRsre = 3,
|
|
|
|
|
|
|
|
|
|
/// <summary>Van Jacobson's algorithm. See [RFC1144].</summary>
|
|
|
|
|
TcpRtoAlgorithmVanj = 4,
|
|
|
|
|
|
|
|
|
|
/// <summary>Other.</summary>
|
|
|
|
|
MIB_TCP_RTO_OTHER = 1,
|
|
|
|
|
|
|
|
|
|
/// <summary>Constant time-out.</summary>
|
|
|
|
|
MIB_TCP_RTO_CONSTANT = 2,
|
|
|
|
|
|
|
|
|
|
/// <summary>MIL-STD-1778. See [RFC4022].</summary>
|
|
|
|
|
MIB_TCP_RTO_RSRE = 3,
|
|
|
|
|
|
|
|
|
|
/// <summary>Van Jacobson's algorithm. See [RFC1144].</summary>
|
|
|
|
|
MIB_TCP_RTO_VANJ = 4,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>The <c>MIB_TCP6ROW</c> structure contains information that describes an IPv6 TCP connection.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>The <c>MIB_TCP6ROW</c> structure is defined on Windows Vista and later.</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The GetTcp6Table function retrieves the IPv6 TCP connection table on the local computer and returns this information in a
|
|
|
|
|
/// MIB_TCP6TABLE structure.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>An array of <c>MIB_TCP6ROW</c> structures are contained in the <c>MIB_TCP6TABLE</c> structure.</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>State</c> member indicates the state of the TCP entry in a TCP state diagram. A TCP connection progresses through a series
|
|
|
|
|
/// of states during its lifetime. The states are: LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT,
|
|
|
|
|
/// CLOSING, LAST-ACK, TIME-WAIT, and the fictional state CLOSED. The CLOSED state is fictional because it represents the state when
|
|
|
|
|
/// there is no Transmission Control Block, and therefore, no connection. The TCP protocol is described in RFC 793. For more
|
|
|
|
|
/// information, see http://www.ietf.org/rfc/rfc793.txt.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>dwLocalPort</c>, and <c>dwRemotePort</c> members are in network byte order. In order to use the <c>dwLocalPort</c> or
|
|
|
|
|
/// <c>dwRemotePort</c> members, the ntohs or inet_ntoa functions in Windows Sockets or similar functions may be needed.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>dwLocalScopeId</c>, and <c>dwRemoteScopeId</c> members are in network byte order. In order to use the
|
|
|
|
|
/// <c>dwLocalScopeId</c> or <c>dwRemoteScopeId</c> members, the ntohl or inet_ntoa functions in Windows Sockets or similar functions
|
|
|
|
|
/// may be needed.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>LocalAddr</c> and <c>RemoteAddr</c> members are stored in in6_addr structures. The RtlIpv6AddressToString or
|
|
|
|
|
/// RtlIpv6AddressToStringEx functions may be used to convert the IPv6 address in the <c>LocalAddr</c> or <c>RemoteAddr</c> members
|
|
|
|
|
/// to a string without loading the Windows Sockets DLL.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>Examples</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The following example retrieves the TCP connection table for IPv6 and prints the state of each connection represented as a
|
|
|
|
|
/// <c>MIB_TCP6ROW</c> structure.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/api/tcpmib/ns-tcpmib-_mib_tcp6row typedef struct _MIB_TCP6ROW {
|
|
|
|
|
// MIB_TCP_STATE State; IN6_ADDR LocalAddr; DWORD dwLocalScopeId; DWORD dwLocalPort; IN6_ADDR RemoteAddr; DWORD dwRemoteScopeId;
|
|
|
|
|
// DWORD dwRemotePort; } MIB_TCP6ROW, *PMIB_TCP6ROW;
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "b3e9eda5-5e86-4790-8b1b-ca9bae44b502")]
|
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
|
|
|
public struct MIB_TCP6ROW
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>MIB_TCP_STATE</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The state of the TCP connection. This member can be one of the values from the <c>MIB_TCP_STATE</c> enumeration type defined
|
|
|
|
|
/// in the Tcpmib.h header file.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <list type="table">
|
|
|
|
|
/// <listheader>
|
|
|
|
|
/// <term>Value</term>
|
|
|
|
|
/// <term>Meaning</term>
|
|
|
|
|
/// </listheader>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSED 1</term>
|
|
|
|
|
/// <term>The TCP connection is in the CLOSED state that represents no connection state at all.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_LISTEN 2</term>
|
|
|
|
|
/// <term>The TCP connection is in the LISTEN state waiting for a connection request from any remote TCP and port.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_SYN_SENT 3</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the SYN-SENT state waiting for a matching connection request after having sent a connection request
|
|
|
|
|
/// (SYN packet).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_SYN_RCVD 4</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the SYN-RECEIVED state waiting for a confirming connection request acknowledgment after having both
|
|
|
|
|
/// received and sent a connection request (SYN packet).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_ESTAB 5</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the ESTABLISHED state that represents an open connection, data received can be delivered to the
|
|
|
|
|
/// user. This is the normal state for the data transfer phase of the TCP connection.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_FIN_WAIT1 6</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is FIN-WAIT-1 state waiting for a connection termination request from the remote TCP, or an acknowledgment
|
|
|
|
|
/// of the connection termination request previously sent.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_FIN_WAIT2 7</term>
|
|
|
|
|
/// <term>The TCP connection is FIN-WAIT-1 state waiting for a connection termination request from the remote TCP.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSE_WAIT 8</term>
|
|
|
|
|
/// <term>The TCP connection is in the CLOSE-WAIT state waiting for a connection termination request from the local user.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSING 9</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the CLOSING state waiting for a connection termination request acknowledgment from the remote TCP.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_LAST_ACK 10</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the LAST-ACK state waiting for an acknowledgment of the connection termination request previously
|
|
|
|
|
/// sent to the remote TCP (which includes an acknowledgment of its connection termination request).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_TIME_WAIT 11</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the TIME-WAIT state waiting for enough time to pass to be sure the remote TCP received the
|
|
|
|
|
/// acknowledgment of its connection termination request.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_DELETE_TCB 12</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the delete TCB state that represents the deletion of the Transmission Control Block (TCB), a data
|
|
|
|
|
/// structure used to maintain information on each TCP entry.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// </list>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public MIB_TCP_STATE dwState;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>IN6_ADDR</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The local IPv6 address for the TCP connection on the local computer. A value of zero indicates the listener can accept a
|
|
|
|
|
/// connection on any interface.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public IN6_ADDR LocalAddr;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The local scope ID for the TCP connection on the local computer.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwLocalScopeId;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The local port number in network byte order for the TCP connection on the local computer.</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The maximum size of an IP port number is 16 bits, so only the lower 16 bits should be used. The upper 16 bits may contain
|
|
|
|
|
/// uninitialized data.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwLocalPort;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>IN6_ADDR</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The IPv6 address for the TCP connection on the remote computer. When the <c>State</c> member is <c>MIB_TCP_STATE_LISTEN</c>,
|
|
|
|
|
/// this value has no meaning.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public IN6_ADDR RemoteAddr;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The remote scope ID for the TCP connection on the remote computer. When the <c>State</c> member is
|
|
|
|
|
/// <c>MIB_TCP_STATE_LISTEN</c>, this value has no meaning.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwRemoteScopeId;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The remote port number in network byte order for the TCP connection on the remote computer. When the <c>State</c> member is
|
|
|
|
|
/// <c>MIB_TCP_STATE_LISTEN</c>, this value has no meaning.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The maximum size of an IP port number is 16 bits, so only the lower 16 bits should be used. The upper 16 bits may contain
|
|
|
|
|
/// uninitialized data.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwRemotePort;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCP6ROW_OWNER_MODULE</c> structure contains information that describes an IPv6 TCP connection bound to a specific
|
|
|
|
|
/// process ID (PID) with ownership data.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The MIB_TCP6TABLE_OWNER_MODULE structure is returned by a call to GetExtendedTcpTable with the TableClass parameter set to a
|
|
|
|
|
/// <c>TCP_TABLE_OWNER_MODULE_LISTENER</c>, <c>TCP_TABLE_OWNER_MODULE_CONNECTIONS</c>, or <c>TCP_TABLE_OWNER_MODULE_ALL</c> from the
|
|
|
|
|
/// TCP_TABLE_CLASS enumeration and the ulAf parameter set to <c>AF_INET6</c>. The <c>MIB_TCP6TABLE_OWNER_MODULE</c> structure
|
|
|
|
|
/// contains an array of <c>MIB_TCP6ROW_OWNER_MODULE</c> structures.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>dwState</c> member indicates the state of the TCP entry in a TCP state diagram. A TCP connection progresses through a
|
|
|
|
|
/// series of states during its lifetime. The states are: LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2,
|
|
|
|
|
/// CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT, and the fictional state CLOSED. The CLOSED state is fictional because it represents the
|
|
|
|
|
/// state when there is no Transmission Control Block, and therefore, no connection. The TCP protocol is described in RFC 793. For
|
|
|
|
|
/// more information, see http://www.ietf.org/rfc/rfc793.txt.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>ucLocalAddr</c> and <c>ucRemoteAddr</c> members are stored in a character array in network byte order. The
|
|
|
|
|
/// RtlIpv6AddressToString or RtlIpv6AddressToStringEx functions may be used to convert the IPv6 address in the <c>ucLocalAddr</c> or
|
|
|
|
|
/// <c>ucRemoteAddr</c> members to a string without loading the Windows Sockets DLL.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>dwLocalScopeId</c>, and <c>dwRemoteScopeId</c> members are in network byte order. In order to use the
|
|
|
|
|
/// <c>dwLocalScopeId</c> or <c>dwRemoteScopeId</c> members, the ntohl or inet_ntoa functions in Windows Sockets or similar functions
|
|
|
|
|
/// may be needed.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>dwLocalPort</c> and <c>dwRemotePort</c> members are in network byte order. In order to use the <c>dwLocalPort</c> or
|
|
|
|
|
/// <c>dwRemotePort</c> members, the ntohs or inet_ntoa functions in Windows Sockets or similar functions may be needed.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// On the Microsoft Windows Software Development Kit (SDK) released for Windows Vista and later, the organization of header files
|
|
|
|
|
/// has changed. This structure is defined in the Tcpmib.h header file, not in the Iprtrmib.h header file. Note that the Tcpmib.h
|
|
|
|
|
/// header file is automatically included in Iprtrmib.h, which is automatically included in the Iphlpapi.h header file. The Tcpmib.h
|
|
|
|
|
/// and Iprtrmib.h header files should never be used directly.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/api/tcpmib/ns-tcpmib-_mib_tcp6row_owner_module typedef struct
|
|
|
|
|
// _MIB_TCP6ROW_OWNER_MODULE { UCHAR ucLocalAddr[16]; DWORD dwLocalScopeId; DWORD dwLocalPort; UCHAR ucRemoteAddr[16]; DWORD
|
|
|
|
|
// dwRemoteScopeId; DWORD dwRemotePort; DWORD dwState; DWORD dwOwningPid; LARGE_INTEGER liCreateTimestamp; ULONGLONG
|
|
|
|
|
// OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE]; } MIB_TCP6ROW_OWNER_MODULE, *PMIB_TCP6ROW_OWNER_MODULE;
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "24f2041c-0a8c-4f2c-8585-ebbb0cad394f")]
|
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
|
|
|
public struct MIB_TCP6ROW_OWNER_MODULE
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>UCHAR[16]</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The IPv6 address for the local endpoint of the TCP connection on the local computer. A value of zero indicates the listener
|
|
|
|
|
/// can accept a connection on any interface.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
2019-04-24 10:37:19 -04:00
|
|
|
|
public IN6_ADDR ucLocalAddr;
|
2019-04-18 22:39:42 -04:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The scope ID in network byte order for the local IPv6 address.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwLocalScopeId;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The port number in network byte order for the local endpoint of the TCP connection on the local computer.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwLocalPort;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>UCHAR[16]</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The IPv6 address of the remote endpoint of the TCP connection on the remote computer. When the <c>dwState</c> member is
|
|
|
|
|
/// <c>MIB_TCP_STATE_LISTEN</c>, this value has no meaning.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
2019-04-24 10:37:19 -04:00
|
|
|
|
public IN6_ADDR ucRemoteAddr;
|
2019-04-18 22:39:42 -04:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The scope ID in network byte order for the remote IPv6 address.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwRemoteScopeId;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The port number in network byte order for the remote endpoint of the TCP connection on the remote computer.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwRemotePort;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The state of the TCP connection. This member can be one of the values from the <c>MIB_TCP_STATE</c> enumeration defined in
|
|
|
|
|
/// the Tcpmib.h header file. Note that the Tcpmib.h header file is automatically included in Iprtrmib.h, which is automatically
|
|
|
|
|
/// included in the Iphlpapi.h header file. The Tcpmib.h and Iprtrmib.h header files should never be used directly.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <list type="table">
|
|
|
|
|
/// <listheader>
|
|
|
|
|
/// <term>Value</term>
|
|
|
|
|
/// <term>Meaning</term>
|
|
|
|
|
/// </listheader>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSED 1</term>
|
|
|
|
|
/// <term>The TCP connection is in the CLOSED state that represents no connection state at all.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_LISTEN 2</term>
|
|
|
|
|
/// <term>The TCP connection is in the LISTEN state waiting for a connection request from any remote TCP and port.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_SYN_SENT 3</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the SYN-SENT state waiting for a matching connection request after having sent a connection request
|
|
|
|
|
/// (SYN packet).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_SYN_RCVD 4</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the SYN-RECEIVED state waiting for a confirming connection request acknowledgment after having both
|
|
|
|
|
/// received and sent a connection request (SYN packet).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_ESTAB 5</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the ESTABLISHED state that represents an open connection, data received can be delivered to the
|
|
|
|
|
/// user. This is the normal state for the data transfer phase of the TCP connection.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_FIN_WAIT1 6</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is FIN-WAIT-1 state waiting for a connection termination request from the remote TCP, or an acknowledgment
|
|
|
|
|
/// of the connection termination request previously sent.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_FIN_WAIT2 7</term>
|
|
|
|
|
/// <term>The TCP connection is FIN-WAIT-1 state waiting for a connection termination request from the remote TCP.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSE_WAIT 8</term>
|
|
|
|
|
/// <term>The TCP connection is in the CLOSE-WAIT state waiting for a connection termination request from the local user.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSING 9</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the CLOSING state waiting for a connection termination request acknowledgment from the remote TCP.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_LAST_ACK 10</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the LAST-ACK state waiting for an acknowledgment of the connection termination request previously
|
|
|
|
|
/// sent to the remote TCP (which includes an acknowledgment of its connection termination request).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_TIME_WAIT 11</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the TIME-WAIT state waiting for enough time to pass to be sure the remote TCP received the
|
|
|
|
|
/// acknowledgment of its connection termination request.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_DELETE_TCB 12</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the delete TCB state that represents the deletion of the Transmission Control Block (TCB), a data
|
|
|
|
|
/// structure used to maintain information on each TCP entry.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// </list>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public MIB_TCP_STATE dwState;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The PID of the local process that issued a context bind for this TCP connection.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwOwningPid;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>LARGE_INTEGER</c></para>
|
|
|
|
|
/// <para>A SYSTEMTIME structure that indicates when the context bind operation that created this TCP connection occurred.</para>
|
|
|
|
|
/// </summary>
|
2020-07-28 09:39:29 -04:00
|
|
|
|
public SYSTEMTIME liCreateTimestamp;
|
2019-04-18 22:39:42 -04:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>ULONGLONG[TCPIP_OWNING_MODULE_SIZE]</c></para>
|
|
|
|
|
/// <para>An array of opaque data that contains ownership information.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = TCPIP_OWNING_MODULE_SIZE)]
|
|
|
|
|
public ulong[] OwningModuleInfo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCP6ROW_OWNER_PID</c> structure contains information that describes an IPv6 TCP connection associated with a specific
|
|
|
|
|
/// process ID (PID).
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The MIB_TCP6TABLE_OWNER_PID structure is returned by a call to GetExtendedTcpTable with the TableClass parameter set to
|
|
|
|
|
/// <c>TCP_TABLE_OWNER_PID_LISTENER</c>, <c>TCP_TABLE_OWNER_PID_CONNECTIONS</c>, or <c>TCP_TABLE_OWNER_PID_ALL</c> from the
|
|
|
|
|
/// TCP_TABLE_CLASS enumeration and the ulAf parameter set to <c>AF_INET6</c>. The <c>MIB_TCP6TABLE_OWNER_PID</c> structure contains
|
|
|
|
|
/// an array of <c>MIB_TCP6ROW_OWNER_PID</c> structures.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>dwState</c> member indicates the state of the TCP entry in a TCP state diagram. A TCP connection progresses through a
|
|
|
|
|
/// series of states during its lifetime. The states are: LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2,
|
|
|
|
|
/// CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT, and the fictional state CLOSED. The CLOSED state is fictional because it represents the
|
|
|
|
|
/// state when there is no Transmission Control Block, and therefore, no connection. The TCP protocol is described in RFC 793. For
|
|
|
|
|
/// more information, see http://www.ietf.org/rfc/rfc793.txt.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>dwLocalPort</c>, and <c>dwRemotePort</c> members are in network byte order. In order to use the <c>dwLocalPort</c> or
|
|
|
|
|
/// <c>dwRemotePort</c> members, the ntohs or inet_ntoa functions in Windows Sockets or similar functions may be needed.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>dwLocalScopeId</c>, and <c>dwRemoteScopeId</c> members are in network byte order. In order to use the
|
|
|
|
|
/// <c>dwLocalScopeId</c> or <c>dwRemoteScopeId</c> members, the ntohl or inet_ntoa functions in Windows Sockets or similar functions
|
|
|
|
|
/// may be needed.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>ucLocalAddr</c> and <c>ucRemoteAddr</c> members are stored in a character array in network byte order. The
|
|
|
|
|
/// RtlIpv6AddressToString or RtlIpv6AddressToStringEx functions may be used to convert the IPv6 address in the <c>ucLocalAddr</c> or
|
|
|
|
|
/// <c>ucRemoteAddr</c> members to a string without loading the Windows Sockets DLL.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// On the Microsoft Windows Software Development Kit (SDK) released for Windows Vista and later, the organization of header files
|
|
|
|
|
/// has changed. This structure is defined in the Tcpmib.h header file, not in the Iprtrmib.h header file. Note that the Tcpmib.h
|
|
|
|
|
/// header file is automatically included in Iprtrmib.h, which is automatically included in the Iphlpapi.h header file. The Tcpmib.h
|
|
|
|
|
/// and Iprtrmib.h header files should never be used directly.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/api/tcpmib/ns-tcpmib-_mib_tcp6row_owner_pid typedef struct
|
|
|
|
|
// _MIB_TCP6ROW_OWNER_PID { UCHAR ucLocalAddr[16]; DWORD dwLocalScopeId; DWORD dwLocalPort; UCHAR ucRemoteAddr[16]; DWORD
|
|
|
|
|
// dwRemoteScopeId; DWORD dwRemotePort; DWORD dwState; DWORD dwOwningPid; } MIB_TCP6ROW_OWNER_PID, *PMIB_TCP6ROW_OWNER_PID;
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "d0c9c783-c095-487e-a007-8a10700f9fea")]
|
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
|
|
|
public struct MIB_TCP6ROW_OWNER_PID
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>UCHAR[16]</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The IPv6 address for the local endpoint of the TCP connection on the local computer. A value of zero indicates the listener
|
|
|
|
|
/// can accept a connection on any interface.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
2019-04-24 10:37:19 -04:00
|
|
|
|
public IN6_ADDR ucLocalAddr;
|
2019-04-18 22:39:42 -04:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The scope ID in network byte order for the local IPv6 address.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwLocalScopeId;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The port number in network byte order for the local endpoint of the TCP connection on the local computer.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwLocalPort;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>UCHAR[16]</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The IPv6 address of the remote endpoint of the TCP connection on the remote computer. When the <c>dwState</c> member is
|
|
|
|
|
/// <c>MIB_TCP_STATE_LISTEN</c>, this value has no meaning.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
2019-04-24 10:37:19 -04:00
|
|
|
|
public IN6_ADDR ucRemoteAddr;
|
2019-04-18 22:39:42 -04:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The scope ID in network byte order for the remote IPv6 address.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwRemoteScopeId;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The port number in network byte order for the remote endpoint of the TCP connection on the remote computer.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwRemotePort;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The state of the TCP connection. This member can be one of the values from the <c>MIB_TCP_STATE</c> enumeration defined in
|
|
|
|
|
/// the Tcpmib.h header file. Note that the Tcpmib.h header file is automatically included in Iprtrmib.h, which is automatically
|
|
|
|
|
/// included in the Iphlpapi.h header file. The Tcpmib.h and Iprtrmib.h header files should never be used directly.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <list type="table">
|
|
|
|
|
/// <listheader>
|
|
|
|
|
/// <term>Value</term>
|
|
|
|
|
/// <term>Meaning</term>
|
|
|
|
|
/// </listheader>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSED 1</term>
|
|
|
|
|
/// <term>The TCP connection is in the CLOSED state that represents no connection state at all.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_LISTEN 2</term>
|
|
|
|
|
/// <term>The TCP connection is in the LISTEN state waiting for a connection request from any remote TCP and port.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_SYN_SENT 3</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the SYN-SENT state waiting for a matching connection request after having sent a connection request
|
|
|
|
|
/// (SYN packet).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_SYN_RCVD 4</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the SYN-RECEIVED state waiting for a confirming connection request acknowledgment after having both
|
|
|
|
|
/// received and sent a connection request (SYN packet).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_ESTAB 5</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the ESTABLISHED state that represents an open connection, data received can be delivered to the
|
|
|
|
|
/// user. This is the normal state for the data transfer phase of the TCP connection.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_FIN_WAIT1 6</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is FIN-WAIT-1 state waiting for a connection termination request from the remote TCP, or an acknowledgment
|
|
|
|
|
/// of the connection termination request previously sent.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_FIN_WAIT2 7</term>
|
|
|
|
|
/// <term>The TCP connection is FIN-WAIT-1 state waiting for a connection termination request from the remote TCP.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSE_WAIT 8</term>
|
|
|
|
|
/// <term>The TCP connection is in the CLOSE-WAIT state waiting for a connection termination request from the local user.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSING 9</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the CLOSING state waiting for a connection termination request acknowledgment from the remote TCP.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_LAST_ACK 10</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the LAST-ACK state waiting for an acknowledgment of the connection termination request previously
|
|
|
|
|
/// sent to the remote TCP (which includes an acknowledgment of its connection termination request).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_TIME_WAIT 11</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the TIME-WAIT state waiting for enough time to pass to be sure the remote TCP received the
|
|
|
|
|
/// acknowledgment of its connection termination request.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_DELETE_TCB 12</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the delete TCB state that represents the deletion of the Transmission Control Block (TCB), a data
|
|
|
|
|
/// structure used to maintain information on each TCP entry.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// </list>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public MIB_TCP_STATE dwState;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The PID of the local process that issued a context bind for this TCP connection.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwOwningPid;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>The <c>MIB_TCP6ROW2</c> structure contains information that describes an IPv6 TCP connection.</summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>The <c>MIB_TCP6ROW2</c> structure is defined on Windows Vista and later.</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The GetTcp6Table2function retrieves the IPv6 TCP connection table on the local computer and returns this information in a
|
|
|
|
|
/// MIB_TCP6TABLE2 structure.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>An array of <c>MIB_TCP6ROW2</c> structures are contained in the <c>MIB_TCP6TABLE2</c> structure.</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>State</c> member indicates the state of the TCP entry in a TCP state diagram. A TCP connection progresses through a series
|
|
|
|
|
/// of states during its lifetime. The states are: LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT,
|
|
|
|
|
/// CLOSING, LAST-ACK, TIME-WAIT, and the fictional state CLOSED. The CLOSED state is fictional because it represents the state when
|
|
|
|
|
/// there is no Transmission Control Block, and therefore, no connection. The TCP protocol is described in RFC 793. For more
|
|
|
|
|
/// information, see http://www.ietf.org/rfc/rfc793.txt.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>dwLocalPort</c>, and <c>dwRemotePort</c> members are in network byte order. In order to use the <c>dwLocalPort</c> or
|
|
|
|
|
/// <c>dwRemotePort</c> members, the ntohs or inet_ntoa functions in Windows Sockets or similar functions may be needed.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>dwLocalScopeId</c>, and <c>dwRemoteScopeId</c> members are in network byte order. In order to use the
|
|
|
|
|
/// <c>dwLocalScopeId</c> or <c>dwRemoteScopeId</c> members, the ntohl or inet_ntoa functions in Windows Sockets or similar functions
|
|
|
|
|
/// may be needed.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>LocalAddr</c> and <c>RemoteAddr</c> members are stored in in6_addr structures. The RtlIpv6AddressToString or
|
|
|
|
|
/// RtlIpv6AddressToStringEx functions may be used to convert the IPv6 address in the <c>LocalAddr</c> or <c>RemoteAddr</c> members
|
|
|
|
|
/// to a string without loading the Windows Sockets DLL.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
// https://docs.microsoft.com/en-us/windows/desktop/api/tcpmib/ns-tcpmib-_mib_tcp6row2 typedef struct _MIB_TCP6ROW2 { IN6_ADDR
|
|
|
|
|
// LocalAddr; DWORD dwLocalScopeId; DWORD dwLocalPort; IN6_ADDR RemoteAddr; DWORD dwRemoteScopeId; DWORD dwRemotePort; MIB_TCP_STATE
|
|
|
|
|
// State; DWORD dwOwningPid; TCP_CONNECTION_OFFLOAD_STATE dwOffloadState; } MIB_TCP6ROW2, *PMIB_TCP6ROW2;
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "bbec3397-0317-40f7-926f-2ec48cf5386d")]
|
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
|
|
|
public struct MIB_TCP6ROW2
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>IN6_ADDR</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The local IPv6 address for the TCP connection on the local computer. A value of zero indicates the listener can accept a
|
|
|
|
|
/// connection on any interface.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public IN6_ADDR LocalAddr;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The local scope ID for the TCP connection on the local computer.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwLocalScopeId;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The local port number in network byte order for the TCP connection on the local computer.</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The maximum size of an IP port number is 16 bits, so only the lower 16 bits should be used. The upper 16 bits may contain
|
|
|
|
|
/// uninitialized data.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwLocalPort;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>IN6_ADDR</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The IPv6 address for the TCP connection on the remote computer. When the <c>State</c> member is <c>MIB_TCP_STATE_LISTEN</c>,
|
|
|
|
|
/// this value has no meaning.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public IN6_ADDR RemoteAddr;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The remote scope ID for the TCP connection on the remote computer. When the <c>State</c> member is
|
|
|
|
|
/// <c>MIB_TCP_STATE_LISTEN</c>, this value has no meaning.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwRemoteScopeId;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The remote port number in network byte order for the TCP connection on the remote computer. When the <c>State</c> member is
|
|
|
|
|
/// <c>MIB_TCP_STATE_LISTEN</c>, this value has no meaning.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The maximum size of an IP port number is 16 bits, so only the lower 16 bits should be used. The upper 16 bits may contain
|
|
|
|
|
/// uninitialized data.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwRemotePort;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>MIB_TCP_STATE</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The state of the TCP connection. This member can be one of the values from the <c>MIB_TCP_STATE</c> enumeration type defined
|
|
|
|
|
/// in the Tcpmib.h header file.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <list type="table">
|
|
|
|
|
/// <listheader>
|
|
|
|
|
/// <term>Value</term>
|
|
|
|
|
/// <term>Meaning</term>
|
|
|
|
|
/// </listheader>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSED 1</term>
|
|
|
|
|
/// <term>The TCP connection is in the CLOSED state that represents no connection state at all.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_LISTEN 2</term>
|
|
|
|
|
/// <term>The TCP connection is in the LISTEN state waiting for a connection request from any remote TCP and port.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_SYN_SENT 3</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the SYN-SENT state waiting for a matching connection request after having sent a connection request
|
|
|
|
|
/// (SYN packet).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_SYN_RCVD 4</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the SYN-RECEIVED state waiting for a confirming connection request acknowledgment after having both
|
|
|
|
|
/// received and sent a connection request (SYN packet).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_ESTAB 5</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the ESTABLISHED state that represents an open connection, data received can be delivered to the
|
|
|
|
|
/// user. This is the normal state for the data transfer phase of the TCP connection.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_FIN_WAIT1 6</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is FIN-WAIT-1 state waiting for a connection termination request from the remote TCP, or an acknowledgment
|
|
|
|
|
/// of the connection termination request previously sent.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_FIN_WAIT2 7</term>
|
|
|
|
|
/// <term>The TCP connection is FIN-WAIT-1 state waiting for a connection termination request from the remote TCP.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSE_WAIT 8</term>
|
|
|
|
|
/// <term>The TCP connection is in the CLOSE-WAIT state waiting for a connection termination request from the local user.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSING 9</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the CLOSING state waiting for a connection termination request acknowledgment from the remote TCP.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_LAST_ACK 10</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the LAST-ACK state waiting for an acknowledgment of the connection termination request previously
|
|
|
|
|
/// sent to the remote TCP (which includes an acknowledgment of its connection termination request).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_TIME_WAIT 11</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the TIME-WAIT state waiting for enough time to pass to be sure the remote TCP received the
|
|
|
|
|
/// acknowledgment of its connection termination request.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_DELETE_TCB 12</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the delete TCB state that represents the deletion of the Transmission Control Block (TCB), a data
|
|
|
|
|
/// structure used to maintain information on each TCP entry.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// </list>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public MIB_TCP_STATE State;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The PID of the process that issued a context bind for this TCP connection.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwOwningPid;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>TCP_CONNECTION_OFFLOAD_STATE</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The offload state for this TCP connection. This parameter can be one of the enumeration values for the
|
|
|
|
|
/// TCP_CONNECTION_OFFLOAD_STATE defined in the Tcpmib.h header.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public TCP_CONNECTION_OFFLOAD_STATE dwOffloadState;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>The <c>MIB_TCPROW</c> structure contains information that descibes an IPv4 TCP connection.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The GetTcpTable function retrieves the IPv4 TCP connection table on the local computer and returns this information in a
|
|
|
|
|
/// MIB_TCPTABLE structure.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// An array of <c>MIB_TCPROW</c> structures are contained in the <c>MIB_TCPTABLE</c> structure. The <c>MIB_TCPROW</c> structure is
|
|
|
|
|
/// also used by the SetTcpEntry function.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>dwState</c> member indicates the state of the TCP entry in a TCP state diagram. A TCP connection progresses through a
|
|
|
|
|
/// series of states during its lifetime. The states are: LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2,
|
|
|
|
|
/// CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT, and the fictional state CLOSED. The CLOSED state is fictional because it represents the
|
|
|
|
|
/// state when there is no Transmission Control Block, and therefore, no connection. The TCP protocol is described in RFC 793. For
|
|
|
|
|
/// more information, see http://www.ietf.org/rfc/rfc793.txt.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>dwLocalAddr</c> and <c>dwRemoteAddr</c> members are stored as a <c>DWORD</c> in the same format as the in_addr structure.
|
|
|
|
|
/// In order to use the <c>dwLocalAddr</c> or <c>dwRemoteAddr</c> members, the ntohl or inet_ntoa functions in Windows Sockets or
|
|
|
|
|
/// similar functions may be needed. On Windows Vista and later, the RtlIpv4AddressToString or RtlIpv4AddressToStringEx functions may
|
|
|
|
|
/// be used to convert the IPv4 address in the <c>dwLocalAddr</c> or <c>dwRemoteAddr</c> members to a string without loading the
|
|
|
|
|
/// Windows Sockets DLL.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>dwLocalPort</c>, and <c>dwRemotePort</c> members are in network byte order. In order to use the <c>dwLocalPort</c> or
|
|
|
|
|
/// <c>dwRemotePort</c> members, the ntohs or inet_ntoa functions in Windows Sockets or similar functions may be needed.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCPROW</c> structure changed slightly on Windows Vista and later. On Windows Vista and later, the <c>dwState</c>
|
|
|
|
|
/// member is replaced by a union that contains the following members.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <list type="table">
|
|
|
|
|
/// <listheader>
|
|
|
|
|
/// <term>Member</term>
|
|
|
|
|
/// <term>Description</term>
|
|
|
|
|
/// </listheader>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>DWORD dwState</term>
|
|
|
|
|
/// <term>The state of the TCP connection.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE State</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The state of the TCP connection. This member can be one of the values from the MIB_TCP_STATE enumeration type defined in the
|
|
|
|
|
/// Tcpmib.h header file. The possible values are the same as those defined for the dwState member.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// </list>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// In the Windows SDK, the version of the structure for use on Windows Vista and later is defined as <c>MIB_TCPROW_LH</c>. In the
|
|
|
|
|
/// Windows SDK, the version of this structure to be used on earlier systems including Windows 2000 and later is defined as
|
|
|
|
|
/// <c>MIB_TCPROW_W2K</c>. When compiling an application if the target platform is Windows Vista and later (, , or ), the
|
|
|
|
|
/// <c>MIB_TCPROW_LH</c> structure is typedefed to the <c>MIB_TCPROW</c> structure. When compiling an application if the target
|
|
|
|
|
/// platform is not Windows Vista and later, the <c>MIB_TCPROW_W2K</c> structure is typedefed to the <c>MIB_TCPROW</c> structure.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// On the Windows SDK released for Windows Vista and later, the organization of header files has changed. This structure is defined
|
|
|
|
|
/// in the Tcpmib.h header file, not in the Iprtrmib.h header file. Note that the Tcpmib.h header file is automatically included in
|
|
|
|
|
/// Iprtrmib.h, which is automatically included in the Iphlpapi.h header file. The Tcpmib.h and Iprtrmib.h header files should never
|
|
|
|
|
/// be used directly.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>Examples</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The following example retrieves the TCP connection table and prints the state of each connection represented as a
|
|
|
|
|
/// <c>MIB_TCPROW</c> structure.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/api/tcpmib/ns-tcpmib-_mib_tcprow_lh typedef struct
|
|
|
|
|
// _MIB_TCPROW_LH { union { DWORD dwState; MIB_TCP_STATE State; }; DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwRemoteAddr; DWORD
|
|
|
|
|
// dwRemotePort; } MIB_TCPROW_LH, *PMIB_TCPROW_LH;
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "36364854-caa8-4652-be8e-f741b36d9fd7")]
|
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
|
|
|
public struct MIB_TCPROW
|
|
|
|
|
{
|
|
|
|
|
/// <summary>The state of the TCP connection.</summary>
|
|
|
|
|
public MIB_TCP_STATE dwState;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The local IPv4 address for the TCP connection on the local computer. A value of zero indicates the listener can accept a
|
|
|
|
|
/// connection on any interface.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwLocalAddr;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The local port number in network byte order for the TCP connection on the local computer.</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The maximum size of an IP port number is 16 bits, so only the lower 16 bits should be used. The upper 16 bits may contain
|
|
|
|
|
/// uninitialized data.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwLocalPort;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The IPv4 address for the TCP connection on the remote computer. When the <c>dwState</c> member is
|
|
|
|
|
/// <c>MIB_TCP_STATE_LISTEN</c>, this value has no meaning.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwRemoteAddr;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The remote port number in network byte order for the TCP connection on the remote computer. When the <c>dwState</c> member is
|
|
|
|
|
/// <c>MIB_TCP_STATE_LISTEN</c>, this member has no meaning.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The maximum size of an IP port number is 16 bits, so only the lower 16 bits should be used. The upper 16 bits may contain
|
|
|
|
|
/// uninitialized data.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwRemotePort;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCPROW_OWNER_MODULE</c> structure contains information that describes an IPv4 TCP connection with ownership data, IPv4
|
|
|
|
|
/// addresses, ports used by the TCP connection, and the specific process ID (PID) associated with connection.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCPROW_OWNER_MODULE</c> structure is returned by a call to GetExtendedTcpTable with the TableClass parameter set to
|
|
|
|
|
/// <c>TCP_TABLE_OWNER_MODULE_LISTENER</c>, <c>TCP_TABLE_OWNER_MODULE_CONNECTIONS</c>, or <c>TCP_TABLE_OWNER_MODULE_ALL</c> from the
|
|
|
|
|
/// TCP_TABLE_CLASS enumeration and the ulAf parameter set to <c>AF_INET4</c>.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>dwState</c> member indicates the state of the TCP entry in a TCP state diagram. A TCP connection progresses through a
|
|
|
|
|
/// series of states during its lifetime. The states are: LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2,
|
|
|
|
|
/// CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT, and the fictional state CLOSED. The CLOSED state is fictional because it represents the
|
|
|
|
|
/// state when there is no Transmission Control Block, and therefore, no connection. The TCP protocol is described in RFC 793. For
|
|
|
|
|
/// more information, see http://www.ietf.org/rfc/rfc793.txt.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>dwLocalPort</c>, and <c>dwRemotePort</c> members are in network byte order. In order to use the <c>dwLocalPort</c> or
|
|
|
|
|
/// <c>dwRemotePort</c> members, the ntohs or inet_ntoa functions in Windows Sockets or similar functions may be needed. The
|
|
|
|
|
/// <c>dwLocalAddr</c> and <c>dwRemoteAddr</c> members are stored as a <c>DWORD</c> in the same format as the in_addr structure. In
|
|
|
|
|
/// order to use the <c>dwLocalAddr</c> or <c>dwRemoteAddr</c> members, the ntohl or <c>inet_ntoa</c> functions in Windows Sockets or
|
|
|
|
|
/// similar functions may be needed. On Windows Vista and later, the RtlIpv4AddressToString or RtlIpv4AddressToStringEx functions may
|
|
|
|
|
/// be used to convert the IPv4 address in the <c>dwLocalAddr</c> or <c>dwRemoteAddr</c> members to a string without loading the
|
|
|
|
|
/// Windows Sockets DLL.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// On the Windows SDK released for Windows Vista and later, the organization of header files has changed. This structure is defined
|
|
|
|
|
/// in the Tcpmib.h header file, not in the Iprtrmib.h header file. Note that the Tcpmib.h header file is automatically included in
|
|
|
|
|
/// Iprtrmib.h, which is automatically included in the Iphlpapi.h header file. The Tcpmib.h and Iprtrmib.h header files should never
|
|
|
|
|
/// be used directly.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/api/tcpmib/ns-tcpmib-_mib_tcprow_owner_module typedef struct
|
|
|
|
|
// _MIB_TCPROW_OWNER_MODULE { DWORD dwState; DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwRemoteAddr; DWORD dwRemotePort; DWORD
|
|
|
|
|
// dwOwningPid; LARGE_INTEGER liCreateTimestamp; ULONGLONG OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE]; } MIB_TCPROW_OWNER_MODULE, *PMIB_TCPROW_OWNER_MODULE;
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "5fc1e95a-4ab1-4a15-aedc-47cfd811c035")]
|
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
|
|
|
public struct MIB_TCPROW_OWNER_MODULE
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>dwState</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// <c>Type: <c>DWORD</c></c> The state of the TCP connection. This member can be one of the values defined in the Iprtrmib.h
|
|
|
|
|
/// header file.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// On the Windows SDK released for Windows Vista and later, the organization of header files has changed. This member can be one
|
|
|
|
|
/// of the values from the <c>MIB_TCP_STATE</c> enumeration defined in the Tcpmib.h header file, not in the Iprtrmib.h header
|
|
|
|
|
/// file. Note that the Tcpmib.h header file is automatically included in Iprtrmib.h, which is automatically included in the
|
|
|
|
|
/// Iphlpapi.h header file. The Tcpmib.h and Iprtrmib.h header files should never be used directly.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <list type="table">
|
|
|
|
|
/// <listheader>
|
|
|
|
|
/// <term>Value</term>
|
|
|
|
|
/// <term>Meaning</term>
|
|
|
|
|
/// </listheader>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSED 1</term>
|
|
|
|
|
/// <term>The TCP connection is in the CLOSED state that represents no connection state at all.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_LISTEN 2</term>
|
|
|
|
|
/// <term>The TCP connection is in the LISTEN state waiting for a connection request from any remote TCP and port.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_SYN_SENT 3</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the SYN-SENT state waiting for a matching connection request after having sent a connection request
|
|
|
|
|
/// (SYN packet).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_SYN_RCVD 4</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the SYN-RECEIVED state waiting for a confirming connection request acknowledgment after having both
|
|
|
|
|
/// received and sent a connection request (SYN packet).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_ESTAB 5</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the ESTABLISHED state that represents an open connection, data received can be delivered to the
|
|
|
|
|
/// user. This is the normal state for the data transfer phase of the TCP connection.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_FIN_WAIT1 6</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is FIN-WAIT-1 state waiting for a connection termination request from the remote TCP, or an acknowledgment
|
|
|
|
|
/// of the connection termination request previously sent.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_FIN_WAIT2 7</term>
|
|
|
|
|
/// <term>The TCP connection is FIN-WAIT-1 state waiting for a connection termination request from the remote TCP.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSE_WAIT 8</term>
|
|
|
|
|
/// <term>The TCP connection is in the CLOSE-WAIT state waiting for a connection termination request from the local user.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSING 9</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the CLOSING state waiting for a connection termination request acknowledgment from the remote TCP.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_LAST_ACK 10</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the LAST-ACK state waiting for an acknowledgment of the connection termination request previously
|
|
|
|
|
/// sent to the remote TCP (which includes an acknowledgment of its connection termination request).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_TIME_WAIT 11</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the TIME-WAIT state waiting for enough time to pass to be sure the remote TCP received the
|
|
|
|
|
/// acknowledgment of its connection termination request.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_DELETE_TCB 12</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the delete TCB state that represents the deletion of the Transmission Control Block (TCB), a data
|
|
|
|
|
/// structure used to maintain information on each TCP entry.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// </list>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public MIB_TCP_STATE dwState;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The local IPv4 address for the TCP connection on the local computer. A value of zero indicates the listener can accept a
|
|
|
|
|
/// connection on any interface.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public IN_ADDR dwLocalAddr;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The local port number in network byte order for the TCP connection on the local computer.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwLocalPort;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The IPv4 address for the TCP connection on the remote computer. When the <c>dwState</c> member is
|
|
|
|
|
/// <c>MIB_TCP_STATE_LISTEN</c>, this value has no meaning.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public IN_ADDR dwRemoteAddr;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The remote port number in network byte order for the TCP connection on the remote computer. When the <c>dwState</c> member is
|
|
|
|
|
/// <c>MIB_TCP_STATE_LISTEN</c>, this member has no meaning.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwRemotePort;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The PID of the process that issued a context bind for this TCP connection.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwOwningPid;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>LARGE_INTEGER</c></para>
|
|
|
|
|
/// <para>A SYSTEMTIME structure that indicates when the context bind operation that created this TCP link occurred.</para>
|
|
|
|
|
/// </summary>
|
2020-07-28 09:39:29 -04:00
|
|
|
|
public SYSTEMTIME liCreateTimestamp;
|
2019-04-18 22:39:42 -04:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>ULONGLONG[TCPIP_OWNING_MODULE_SIZE]</c></para>
|
|
|
|
|
/// <para>An array of opaque data that contains ownership information.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = TCPIP_OWNING_MODULE_SIZE)]
|
|
|
|
|
public ulong[] OwningModuleInfo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCPROW_OWNER_PID</c> structure contains information that describes an IPv4 TCP connection with IPv4 addresses, ports
|
|
|
|
|
/// used by the TCP connection, and the specific process ID (PID) associated with connection.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCPROW_OWNER_PID</c> structure is returned by a call to GetExtendedTcpTable with the TableClass parameter set to
|
|
|
|
|
/// <c>TCP_TABLE_OWNER_PID_LISTENER</c>, <c>TCP_TABLE_OWNER_PID_CONNECTIONS</c>, or <c>TCP_TABLE_OWNER_PID_ALL</c> from the
|
|
|
|
|
/// TCP_TABLE_CLASS enumeration and the ulAf parameter set to <c>AF_INET4</c>.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>dwState</c> member indicates the state of the TCP entry in a TCP state diagram. A TCP connection progresses through a
|
|
|
|
|
/// series of states during its lifetime. The states are: LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2,
|
|
|
|
|
/// CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT, and the fictional state CLOSED. The CLOSED state is fictional because it represents the
|
|
|
|
|
/// state when there is no Transmission Control Block, and therefore, no connection. The TCP protocol is described in RFC 793. For
|
|
|
|
|
/// more information, see http://www.ietf.org/rfc/rfc793.txt.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>dwLocalPort</c>, and <c>dwRemotePort</c> members are in network byte order. In order to use the <c>dwLocalPort</c> or
|
|
|
|
|
/// <c>dwRemotePort</c> members, the ntohs or inet_ntoa functions in Windows Sockets or similar functions may be needed. The
|
|
|
|
|
/// <c>dwLocalAddr</c> and <c>dwRemoteAddr</c> members are stored as a <c>DWORD</c> in the same format as the in_addr structure. In
|
|
|
|
|
/// order to use the <c>dwLocalAddr</c> or <c>dwRemoteAddr</c> members, the ntohl or <c>inet_ntoa</c> functions in Windows Sockets or
|
|
|
|
|
/// similar functions may be needed. On Windows Vista and later, the RtlIpv4AddressToString or RtlIpv4AddressToStringEx functions may
|
|
|
|
|
/// be used to convert the IPv4 address in the <c>dwLocalAddr</c> or <c>dwRemoteAddr</c> members to a string without loading the
|
|
|
|
|
/// Windows Sockets DLL.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// On the Windows SDK released for Windows Vista and later, the organization of header files has changed. This structure is defined
|
|
|
|
|
/// in the Tcpmib.h header file, not in the Iprtrmib.h header file. Note that the Tcpmib.h header file is automatically included in
|
|
|
|
|
/// Iprtrmib.h, which is automatically included in the Iphlpapi.h header file. The Tcpmib.h and Iprtrmib.h header files should never
|
|
|
|
|
/// be used directly.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/api/tcpmib/ns-tcpmib-_mib_tcprow_owner_pid typedef struct
|
|
|
|
|
// _MIB_TCPROW_OWNER_PID { DWORD dwState; DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwRemoteAddr; DWORD dwRemotePort; DWORD
|
|
|
|
|
// dwOwningPid; } MIB_TCPROW_OWNER_PID, *PMIB_TCPROW_OWNER_PID;
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "220b69a4-b372-4eff-8d5a-eca0d39b8af9")]
|
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
|
|
|
public struct MIB_TCPROW_OWNER_PID
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The state of the TCP connection. This member can be one of the values defined in the Iprtrmib.h header file.</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// On the Windows SDK released for Windows Vista and later, the organization of header files has changed. This member can be one
|
|
|
|
|
/// of the values from the <c>MIB_TCP_STATE</c> enumeration defined in the Tcpmib.h header file, not in the Iprtrmib.h header
|
|
|
|
|
/// file. Note that the Tcpmib.h header file is automatically included in Iprtrmib.h, which is automatically included in the
|
|
|
|
|
/// Iphlpapi.h header file. The Tcpmib.h and Iprtrmib.h header files should never be used directly.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <list type="table">
|
|
|
|
|
/// <listheader>
|
|
|
|
|
/// <term>Value</term>
|
|
|
|
|
/// <term>Meaning</term>
|
|
|
|
|
/// </listheader>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSED 1</term>
|
|
|
|
|
/// <term>The TCP connection is in the CLOSED state that represents no connection state at all.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_LISTEN 2</term>
|
|
|
|
|
/// <term>The TCP connection is in the LISTEN state waiting for a connection request from any remote TCP and port.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_SYN_SENT 3</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the SYN-SENT state waiting for a matching connection request after having sent a connection request
|
|
|
|
|
/// (SYN packet).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_SYN_RCVD 4</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the SYN-RECEIVED state waiting for a confirming connection request acknowledgment after having both
|
|
|
|
|
/// received and sent a connection request (SYN packet).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_ESTAB 5</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the ESTABLISHED state that represents an open connection, data received can be delivered to the
|
|
|
|
|
/// user. This is the normal state for the data transfer phase of the TCP connection.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_FIN_WAIT1 6</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is FIN-WAIT-1 state waiting for a connection termination request from the remote TCP, or an acknowledgment
|
|
|
|
|
/// of the connection termination request previously sent.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_FIN_WAIT2 7</term>
|
|
|
|
|
/// <term>The TCP connection is FIN-WAIT-2 state waiting for a connection termination request from the remote TCP.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSE_WAIT 8</term>
|
|
|
|
|
/// <term>The TCP connection is in the CLOSE-WAIT state waiting for a connection termination request from the local user.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSING 9</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the CLOSING state waiting for a connection termination request acknowledgment from the remote TCP.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_LAST_ACK 10</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the LAST-ACK state waiting for an acknowledgment of the connection termination request previously
|
|
|
|
|
/// sent to the remote TCP (which includes an acknowledgment of its connection termination request).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_TIME_WAIT 11</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the TIME-WAIT state waiting for enough time to pass to be sure the remote TCP received the
|
|
|
|
|
/// acknowledgment of its connection termination request.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_DELETE_TCB 12</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the delete TCB state that represents the deletion of the Transmission Control Block (TCB), a data
|
|
|
|
|
/// structure used to maintain information on each TCP entry.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// </list>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public MIB_TCP_STATE dwState;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The local IPv4 address for the TCP connection on the local computer. A value of zero indicates the listener can accept a
|
|
|
|
|
/// connection on any interface.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public IN_ADDR dwLocalAddr;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The local port number in network byte order for the TCP connection on the local computer.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwLocalPort;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The IPv4 address for the TCP connection on the remote computer. When the <c>dwState</c> member is
|
|
|
|
|
/// <c>MIB_TCP_STATE_LISTEN</c>, this value has no meaning.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public IN_ADDR dwRemoteAddr;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The remote port number in network byte order for the TCP connection on the remote computer. When the <c>dwState</c> member is
|
|
|
|
|
/// <c>MIB_TCP_STATE_LISTEN</c>, this member has no meaning.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwRemotePort;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The PID of the process that issued a context bind for this TCP connection.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwOwningPid;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>The <c>MIB_TCPROW2</c> structure contains information that describes an IPv4 TCP connection.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The GetTcpTable2 function retrieves the IPv4 TCP connection table on the local computer and returns this information in a
|
|
|
|
|
/// MIB_TCPTABLE2 structure.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>An array of <c>MIB_TCPROW2</c> structures are contained in the <c>MIB_TCPTABLE2</c> structure.</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>dwState</c> member indicates the state of the TCP entry in a TCP state diagram. A TCP connection progresses through a
|
|
|
|
|
/// series of states during its lifetime. The states are: LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2,
|
|
|
|
|
/// CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT, and the fictional state CLOSED. The CLOSED state is fictional because it represents the
|
|
|
|
|
/// state when there is no Transmission Control Block, and therefore, no connection. The TCP protocol is described in RFC 793. For
|
|
|
|
|
/// more information, see http://www.ietf.org/rfc/rfc793.txt.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>dwLocalPort</c>, and <c>dwRemotePort</c> members are in network byte order. In order to use the <c>dwLocalPort</c> or
|
|
|
|
|
/// <c>dwRemotePort</c> members, the ntohs or inet_ntoa functions in Windows Sockets or similar functions may be needed. The
|
|
|
|
|
/// <c>dwLocalAddr</c> and <c>dwRemoteAddr</c> members are stored as a <c>DWORD</c> in the same format as the in_addr structure. In
|
|
|
|
|
/// order to use the <c>dwLocalAddr</c> or <c>dwRemoteAddr</c> members, the ntohl or <c>inet_ntoa</c> functions in Windows Sockets or
|
|
|
|
|
/// similar functions may be needed. On Windows Vista and later, the RtlIpv4AddressToString or RtlIpv4AddressToStringEx functions may
|
|
|
|
|
/// be used to convert the IPv4 address in the <c>dwLocalAddr</c> or <c>dwRemoteAddr</c> members to a string without loading the
|
|
|
|
|
/// Windows Sockets DLL.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>Examples</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The following example retrieves the TCP connection table for IPv4 and prints the state of each connection represented as a
|
|
|
|
|
/// <c>MIB_TCPROW2</c> structure.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/api/tcpmib/ns-tcpmib-_mib_tcprow2 typedef struct _MIB_TCPROW2 {
|
|
|
|
|
// DWORD dwState; DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwRemoteAddr; DWORD dwRemotePort; DWORD dwOwningPid;
|
|
|
|
|
// TCP_CONNECTION_OFFLOAD_STATE dwOffloadState; } MIB_TCPROW2, *PMIB_TCPROW2;
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "cff343cd-fe85-4e60-87bd-c1e9833cea38")]
|
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
|
|
|
public struct MIB_TCPROW2
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The state of the TCP connection. This member can be one of the values defined in the Iprtrmib.h header file.</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// On the Windows SDK released for Windows Vista and later, the organization of header files has changed. This member can be one
|
|
|
|
|
/// of the values from the <c>MIB_TCP_STATE</c> enumeration defined in the Tcpmib.h header file, not in the Iprtrmib.h header
|
|
|
|
|
/// file. Note that the Tcpmib.h header file is automatically included in Iprtrmib.h, which is automatically included in the
|
|
|
|
|
/// Iphlpapi.h header file. The Tcpmib.h and Iprtrmib.h header files should never be used directly.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <list type="table">
|
|
|
|
|
/// <listheader>
|
|
|
|
|
/// <term>Value</term>
|
|
|
|
|
/// <term>Meaning</term>
|
|
|
|
|
/// </listheader>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSED 1</term>
|
|
|
|
|
/// <term>The TCP connection is in the CLOSED state that represents no connection state at all.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_LISTEN 2</term>
|
|
|
|
|
/// <term>The TCP connection is in the LISTEN state waiting for a connection request from any remote TCP and port.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_SYN_SENT 3</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the SYN-SENT state waiting for a matching connection request after having sent a connection request
|
|
|
|
|
/// (SYN packet).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_SYN_RCVD 4</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the SYN-RECEIVED state waiting for a confirming connection request acknowledgment after having both
|
|
|
|
|
/// received and sent a connection request (SYN packet).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_ESTAB 5</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the ESTABLISHED state that represents an open connection, data received can be delivered to the
|
|
|
|
|
/// user. This is the normal state for the data transfer phase of the TCP connection.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_FIN_WAIT1 6</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is FIN-WAIT-1 state waiting for a connection termination request from the remote TCP, or an acknowledgment
|
|
|
|
|
/// of the connection termination request previously sent.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_FIN_WAIT2 7</term>
|
|
|
|
|
/// <term>The TCP connection is FIN-WAIT-1 state waiting for a connection termination request from the remote TCP.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSE_WAIT 8</term>
|
|
|
|
|
/// <term>The TCP connection is in the CLOSE-WAIT state waiting for a connection termination request from the local user.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_CLOSING 9</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the CLOSING state waiting for a connection termination request acknowledgment from the remote TCP.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_LAST_ACK 10</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the LAST-ACK state waiting for an acknowledgment of the connection termination request previously
|
|
|
|
|
/// sent to the remote TCP (which includes an acknowledgment of its connection termination request).
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_TIME_WAIT 11</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the TIME-WAIT state waiting for enough time to pass to be sure the remote TCP received the
|
|
|
|
|
/// acknowledgment of its connection termination request.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>MIB_TCP_STATE_DELETE_TCB 12</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The TCP connection is in the delete TCB state that represents the deletion of the Transmission Control Block (TCB), a data
|
|
|
|
|
/// structure used to maintain information on each TCP entry.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// </list>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public MIB_TCP_STATE dwState;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The local IPv4 address for the TCP connection on the local computer. A value of zero indicates the listener can accept a
|
|
|
|
|
/// connection on any interface.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public IN_ADDR dwLocalAddr;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The local port number in network byte order for the TCP connection on the local computer.</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The maximum size of an IP port number is 16 bits, so only the lower 16 bits should be used. The upper 16 bits may contain
|
|
|
|
|
/// uninitialized data.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwLocalPort;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The IPv4 address for the TCP connection on the remote computer. When the <c>dwState</c> member is
|
|
|
|
|
/// <c>MIB_TCP_STATE_LISTEN</c>, this value has no meaning.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public IN_ADDR dwRemoteAddr;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The remote port number in network byte order for the TCP connection on the remote computer. When the <c>dwState</c> member is
|
|
|
|
|
/// <c>MIB_TCP_STATE_LISTEN</c>, this member has no meaning.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The maximum size of an IP port number is 16 bits, so only the lower 16 bits should be used. The upper 16 bits may contain
|
|
|
|
|
/// uninitialized data.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwRemotePort;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The PID of the process that issued a context bind for this TCP connection.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwOwningPid;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>TCP_CONNECTION_OFFLOAD_STATE</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The offload state for this TCP connection. This parameter can be one of the enumeration values for the
|
|
|
|
|
/// TCP_CONNECTION_OFFLOAD_STATE defined in the Tcpmib.h header.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public TCP_CONNECTION_OFFLOAD_STATE dwOffloadState;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>The <c>MIB_TCPSTATS</c> structure contains statistics for the TCP protocol running on the local computer.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>The GetTcpStatistics function returns a pointer to a <c>MIB_TCPSTATS</c> structure.</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCPSTATS</c> structure changed slightly on Windows Vista and later. On Windows Vista and later, the
|
|
|
|
|
/// <c>dwRtoAlgorithm</c> member is replaced by a union that contains the following members.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <list type="table">
|
|
|
|
|
/// <listheader>
|
|
|
|
|
/// <term>Member</term>
|
|
|
|
|
/// <term>Description</term>
|
|
|
|
|
/// </listheader>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>DWORD dwRtoAlgorithm</term>
|
|
|
|
|
/// <term>The retransmission time-out (RTO) algorithm in use.</term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// <item>
|
|
|
|
|
/// <term>TCP_RTO_ALGORITHM RtoAlgorithm</term>
|
|
|
|
|
/// <term>
|
|
|
|
|
/// The retransmission time-out (RTO) algorithm in use. This member can be one of the values from the TCP_RTO_ALGORITHM enumeration
|
|
|
|
|
/// type defined in the Tcpmib.h header file. The possible values are the same as those defined for the dwRtoAlgorithm member.
|
|
|
|
|
/// </term>
|
|
|
|
|
/// </item>
|
|
|
|
|
/// </list>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// In the Windows SDK, the version of the structure for use on Windows Vista and later is defined as <c>MIB_TCPSTATS_LH</c>. In the
|
|
|
|
|
/// Windows SDK, the version of this structure to be used on earlier systems including Windows 2000 and later is defined as
|
|
|
|
|
/// <c>MIB_TCPSTATS_W2K</c>. When compiling an application if the target platform is Windows Vista and later (, , or ), the
|
|
|
|
|
/// <c>MIB_TCPSTATS_LH</c> structure is typedefed to the <c>MIB_TCPSTATS</c> structure. When compiling an application if the target
|
|
|
|
|
/// platform is not Windows Vista and later, the <c>MIB_TCPSTATS_W2K</c> structure is typedefed to the <c>MIB_TCPSTATS</c> structure.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// On the Microsoft Windows Software Development Kit (SDK) released for Windows Vista and later, the organization of header files
|
|
|
|
|
/// has changed. This structure is defined in the Tcpmib.h header file, not in the Iprtrmib.h header file. Note that the Tcpmib.h
|
|
|
|
|
/// header file is automatically included in Iprtrmib.h, which is automatically included in the Iphlpapi.h header file. The Tcpmib.h
|
|
|
|
|
/// and Iprtrmib.h header files should never be used directly.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/api/tcpmib/ns-tcpmib-_mib_tcpstats_lh typedef struct
|
|
|
|
|
// _MIB_TCPSTATS_LH { union { DWORD dwRtoAlgorithm; TCP_RTO_ALGORITHM RtoAlgorithm; }; DWORD dwRtoMin; DWORD dwRtoMax; DWORD
|
|
|
|
|
// dwMaxConn; DWORD dwActiveOpens; DWORD dwPassiveOpens; DWORD dwAttemptFails; DWORD dwEstabResets; DWORD dwCurrEstab; DWORD
|
|
|
|
|
// dwInSegs; DWORD dwOutSegs; DWORD dwRetransSegs; DWORD dwInErrs; DWORD dwOutRsts; DWORD dwNumConns; } MIB_TCPSTATS_LH, *PMIB_TCPSTATS_LH;
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "08d85d02-62a0-479d-bf56-5dad452436f3")]
|
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
|
|
|
public struct MIB_TCPSTATS
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// The retransmission time-out (RTO) algorithm in use. This member can be one of the values from the TCP_RTO_ALGORITHM
|
|
|
|
|
/// enumeration type defined in the Tcpmib.h header file. The possible values are the same as those defined for the
|
|
|
|
|
/// dwRtoAlgorithm member.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public TCP_RTO_ALGORITHM RtoAlgorithm;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The minimum RTO value in milliseconds.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwRtoMin;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The maximum RTO value in milliseconds.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwRtoMax;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The maximum number of connections. If this member is -1, the maximum number of connections is variable.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwMaxConn;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The number of active opens. In an active open, the client is initiating a connection with the server.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwActiveOpens;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The number of passive opens. In a passive open, the server is listening for a connection request from a client.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwPassiveOpens;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The number of failed connection attempts.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwAttemptFails;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The number of established connections that were reset.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwEstabResets;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The number of currently established connections.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwCurrEstab;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The number of segments received.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwInSegs;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The number of segments transmitted. This number does not include retransmitted segments.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwOutSegs;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The number of segments retransmitted.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwRetransSegs;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The number of errors received.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwInErrs;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The number of segments transmitted with the reset flag set.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwOutRsts;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The number of connections that are currently present in the system. This total number includes connections in all states
|
|
|
|
|
/// except listening connections.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwNumConns;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// [Some information relates to pre-released product which may be substantially modified before it's commercially released.
|
|
|
|
|
/// Microsoft makes no warranties, express or implied, with respect to the information provided here.]
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCPSTATS2</c> structure contains statistics for the TCP protocol running on the local computer. This structure is
|
|
|
|
|
/// different from MIB_TCPSTATS structure in that it uses 64-bit counters, rather than 32-bit counters.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>The GetTcpStatisticsEx2 function returns a pointer to a <c>MIB_TCPSTATS2</c> structure.</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// This structure is defined in the Tcpmib.h header file, not in the Iprtrmib.h header file. Note that the Tcpmib.h header file is
|
|
|
|
|
/// automatically included in Iprtrmib.h, which is automatically included in the Iphlpapi.h header file. The Tcpmib.h and Iprtrmib.h
|
|
|
|
|
/// header files should never be used directly.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/api/tcpmib/ns-tcpmib-_mib_tcpstats2 typedef struct
|
|
|
|
|
// _MIB_TCPSTATS2 { TCP_RTO_ALGORITHM RtoAlgorithm; DWORD dwRtoMin; DWORD dwRtoMax; DWORD dwMaxConn; DWORD dwActiveOpens; DWORD
|
|
|
|
|
// dwPassiveOpens; DWORD dwAttemptFails; DWORD dwEstabResets; DWORD dwCurrEstab; DWORD64 dw64InSegs; DWORD64 dw64OutSegs; DWORD
|
|
|
|
|
// dwRetransSegs; DWORD dwInErrs; DWORD dwOutRsts; DWORD dwNumConns; } MIB_TCPSTATS2, *PMIB_TCPSTATS2;
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "A32AA866-406B-4BE0-A4F1-5EBC9DFD646D")]
|
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
|
|
|
public struct MIB_TCPSTATS2
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// The retransmission time-out (RTO) algorithm in use. This member can be one of the values from the TCP_RTO_ALGORITHM
|
|
|
|
|
/// enumeration type defined in the Tcpmib.h header file. The possible values are the same as those defined for the
|
|
|
|
|
/// dwRtoAlgorithm member.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public TCP_RTO_ALGORITHM RtoAlgorithm;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The minimum RTO value in milliseconds.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwRtoMin;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The maximum RTO value in milliseconds.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwRtoMax;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The maximum number of connections. If this member is -1, the maximum number of connections is variable.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwMaxConn;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The number of active opens. In an active open, the client is initiating a connection with the server.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwActiveOpens;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The number of passive opens. In a passive open, the server is listening for a connection request from a client.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwPassiveOpens;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The number of failed connection attempts.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwAttemptFails;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The number of established connections that were reset.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwEstabResets;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The number of currently established connections.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwCurrEstab;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The number of segments received.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public ulong dw64InSegs;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD64</c></para>
|
|
|
|
|
/// <para>The number of segments transmitted. This number does not include retransmitted segments.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public ulong dw64OutSegs;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD64</c></para>
|
|
|
|
|
/// <para>The number of segments retransmitted.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwRetransSegs;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The number of errors received.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwInErrs;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>The number of segments transmitted with the reset flag set.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwOutRsts;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Type: <c>DWORD</c></para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The number of connections that are currently present in the system. This total number includes connections in all states
|
|
|
|
|
/// except listening connections.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwNumConns;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>The <c>MIB_TCP6TABLE</c> structure contains a table of TCP connections for IPv6 on the local computer.</summary>
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "aa814506")]
|
|
|
|
|
[CorrespondingType(typeof(MIB_TCP6ROW))]
|
|
|
|
|
[DefaultProperty(nameof(table))]
|
|
|
|
|
public class MIB_TCP6TABLE : SafeElementArray<MIB_TCP6ROW, uint, CoTaskMemoryMethods>
|
|
|
|
|
{
|
|
|
|
|
/// <summary>Initializes a new instance of the <see cref="MIB_TCP6TABLE"/> class.</summary>
|
|
|
|
|
/// <param name="byteSize">Amount of space, in bytes, to reserve.</param>
|
|
|
|
|
public MIB_TCP6TABLE(uint byteSize) : base((int)byteSize, 0)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>A value that specifies the number of TCP connections in the array.</summary>
|
|
|
|
|
public uint dwNumEntries => Count;
|
|
|
|
|
|
|
|
|
|
/// <summary>An array of <c>MIB_TCP6ROW</c> structures containing TCP connection entries.</summary>
|
|
|
|
|
public MIB_TCP6ROW[] table { get => Elements; set => Elements = value; }
|
|
|
|
|
|
|
|
|
|
/// <summary>Performs an implicit conversion from <see cref="MIB_TCP6TABLE"/> to <see cref="System.IntPtr"/>.</summary>
|
|
|
|
|
/// <param name="table">The MIB_TCP6TABLE instance.</param>
|
|
|
|
|
/// <returns>The result of the conversion.</returns>
|
|
|
|
|
public static implicit operator IntPtr(MIB_TCP6TABLE table) => table.DangerousGetHandle();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCP6TABLE_OWNER_MODULE</c> structure contains a table of process IDs (PIDs) and the IPv6 TCP links context bound to
|
|
|
|
|
/// these PIDs with any available ownership data.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCP6TABLE_OWNER_MODULE</c> structure is returned by a call to GetExtendedTcpTable with the TableClass parameter set to
|
|
|
|
|
/// a <c>TCP_TABLE_OWNER_MODULE_LISTENER</c>, <c>TCP_TABLE_OWNER_MODULE_CONNECTIONS</c>, or <c>TCP_TABLE_OWNER_MODULE_ALL</c> from
|
|
|
|
|
/// the TCP_TABLE_CLASS enumeration and the ulAf parameter set to <c>AF_INET6</c>.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCP6TABLE_OWNER_MODULE</c> structure may contain padding for alignment between the <c>dwNumEntries</c> member and the
|
|
|
|
|
/// first MIB_TCP6ROW_OWNER_MODULE array entry in the <c>table</c> member. Padding for alignment may also be present between the
|
|
|
|
|
/// <c>MIB_TCP6ROW_OWNER_MODULE</c> array entries in the <c>table</c> member. Any access to a <c>MIB_TCP6ROW_OWNER_MODULE</c> array
|
|
|
|
|
/// entry should assume padding may exist.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// On the Microsoft Windows Software Development Kit (SDK) released for Windows Vista and later, the organization of header files
|
|
|
|
|
/// has changed. This structure is defined in the Tcpmib.h header file, not in the Iprtrmib.h header file. Note that the Tcpmib.h
|
|
|
|
|
/// header file is automatically included in Iprtrmib.h, which is automatically included in the Iphlpapi.h header file. The Tcpmib.h
|
|
|
|
|
/// and Iprtrmib.h header files should never be used directly.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/api/tcpmib/ns-tcpmib-_mib_tcp6table_owner_module typedef struct
|
|
|
|
|
// _MIB_TCP6TABLE_OWNER_MODULE { DWORD dwNumEntries; MIB_TCP6ROW_OWNER_MODULE table[ANY_SIZE]; } MIB_TCP6TABLE_OWNER_MODULE, *PMIB_TCP6TABLE_OWNER_MODULE;
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "aa52531c-1d4e-44f9-8638-1528beb491f3")]
|
|
|
|
|
[CorrespondingType(typeof(MIB_TCP6ROW_OWNER_MODULE))]
|
|
|
|
|
[DefaultProperty(nameof(table))]
|
2019-04-24 10:37:19 -04:00
|
|
|
|
public class MIB_TCP6TABLE_OWNER_MODULE : SafeElementArray<MIB_TCP6ROW_OWNER_MODULE, ulong, CoTaskMemoryMethods>
|
2019-04-18 22:39:42 -04:00
|
|
|
|
{
|
|
|
|
|
/// <summary>Initializes a new instance of the <see cref="MIB_TCP6TABLE_OWNER_MODULE"/> class.</summary>
|
|
|
|
|
/// <param name="byteSize">Amount of space, in bytes, to reserve.</param>
|
|
|
|
|
public MIB_TCP6TABLE_OWNER_MODULE(uint byteSize) : base((int)byteSize, 0)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>The number of MIB_TCP6ROW_OWNER_MODULE elements in the <c>table</c>.</para>
|
|
|
|
|
/// </summary>
|
2019-04-24 10:37:19 -04:00
|
|
|
|
public uint dwNumEntries => (uint)Count;
|
2019-04-18 22:39:42 -04:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Array of MIB_TCP6ROW_OWNER_MODULE structures returned by a call to GetExtendedTcpTable.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public MIB_TCP6ROW_OWNER_MODULE[] table { get => Elements; set => Elements = value; }
|
|
|
|
|
|
|
|
|
|
/// <summary>Performs an implicit conversion from <see cref="MIB_TCP6TABLE_OWNER_MODULE"/> to <see cref="IntPtr"/>.</summary>
|
|
|
|
|
/// <param name="table">The MIB_TCP6TABLE_OWNER_MODULE instance.</param>
|
|
|
|
|
/// <returns>The result of the conversion.</returns>
|
|
|
|
|
public static implicit operator IntPtr(MIB_TCP6TABLE_OWNER_MODULE table) => table.DangerousGetHandle();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCP6TABLE_OWNER_PID</c> structure contains a table of process IDs (PIDs) and the IPv6 TCP links that are context bound
|
|
|
|
|
/// to these PIDs.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCP6TABLE_OWNER_PID</c> structure is returned by a call to GetExtendedTcpTable with the TableClass parameter set to
|
|
|
|
|
/// <c>TCP_TABLE_OWNER_PID_LISTENER</c>, <c>TCP_TABLE_OWNER_PID_CONNECTIONS</c>, or <c>TCP_TABLE_OWNER_PID_ALL</c> from the
|
|
|
|
|
/// TCP_TABLE_CLASS enumeration and the ulAf parameter set to <c>AF_INET6</c>.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCP6TABLE_OWNER_PID</c> structure may contain padding for alignment between the <c>dwNumEntries</c> member and the
|
|
|
|
|
/// first MIB_TCP6ROW_OWNER_PID array entry in the <c>table</c> member. Padding for alignment may also be present between the
|
|
|
|
|
/// <c>MIB_TCP6ROW_OWNER_PID</c> array entries in the <c>table</c> member. Any access to a <c>MIB_TCP6ROW_OWNER_PID</c> array entry
|
|
|
|
|
/// should assume padding may exist.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// On the Microsoft Windows Software Development Kit (SDK) released for Windows Vista and later, the organization of header files
|
|
|
|
|
/// has changed. This structure is defined in the Tcpmib.h header file, not in the Iprtrmib.h header file. Note that the Tcpmib.h
|
|
|
|
|
/// header file is automatically included in Iprtrmib.h, which is automatically included in the Iphlpapi.h header file. The Tcpmib.h
|
|
|
|
|
/// and Iprtrmib.h header files should never be used directly.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/api/tcpmib/ns-tcpmib-_mib_tcp6table_owner_pid typedef struct
|
|
|
|
|
// _MIB_TCP6TABLE_OWNER_PID { DWORD dwNumEntries; MIB_TCP6ROW_OWNER_PID table[ANY_SIZE]; } MIB_TCP6TABLE_OWNER_PID, *PMIB_TCP6TABLE_OWNER_PID;
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "93629d1d-e5f2-4ae8-b585-17e39ae4986d")]
|
|
|
|
|
[CorrespondingType(typeof(MIB_TCP6ROW_OWNER_PID))]
|
|
|
|
|
[DefaultProperty(nameof(table))]
|
|
|
|
|
public class MIB_TCP6TABLE_OWNER_PID : SafeElementArray<MIB_TCP6ROW_OWNER_PID, uint, CoTaskMemoryMethods>
|
|
|
|
|
{
|
|
|
|
|
/// <summary>Initializes a new instance of the <see cref="MIB_TCP6TABLE_OWNER_PID"/> class.</summary>
|
|
|
|
|
/// <param name="byteSize">Amount of space, in bytes, to reserve.</param>
|
|
|
|
|
public MIB_TCP6TABLE_OWNER_PID(uint byteSize) : base((int)byteSize, 0)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>The number of MIB_TCP6ROW_OWNER_PID elements in the <c>table</c>.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwNumEntries => Count;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Array of MIB_TCP6ROW_OWNER_PID structures returned by a call to GetExtendedTcpTable.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public MIB_TCP6ROW_OWNER_PID[] table { get => Elements; set => Elements = value; }
|
|
|
|
|
|
|
|
|
|
/// <summary>Performs an implicit conversion from <see cref="MIB_TCP6TABLE_OWNER_PID"/> to <see cref="IntPtr"/>.</summary>
|
|
|
|
|
/// <param name="table">The MIB_TCP6TABLE_OWNER_PID instance.</param>
|
|
|
|
|
/// <returns>The result of the conversion.</returns>
|
|
|
|
|
public static implicit operator IntPtr(MIB_TCP6TABLE_OWNER_PID table) => table.DangerousGetHandle();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>The <c>MIB_TCP6TABLE2</c> structure contains a table of IPv6 TCP connections on the local computer.</summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>The <c>MIB_TCP6TABLE2</c> structure is defined on Windows Vista and later.</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The GetTcp6Table2function retrieves the IPv6 TCP connection table on the local computer and returns this information in a
|
|
|
|
|
/// <c>MIB_TCP6TABLE2</c> structure.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>An array of MIB_TCP6ROW2 structures are contained in the <c>MIB_TCP6TABLE2</c> structure.</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCP6TABLE2</c> structure may contain padding for alignment between the <c>dwNumEntries</c> member and the first
|
|
|
|
|
/// MIB_TCP6ROW2 array entry in the <c>table</c> member. Padding for alignment may also be present between the <c>MIB_TCP6ROW2</c>
|
|
|
|
|
/// array entries in the <c>table</c> member. Any access to a <c>MIB_TCP6ROW2</c> array entry should assume padding may exist.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
// https://docs.microsoft.com/en-us/windows/desktop/api/tcpmib/ns-tcpmib-_mib_tcp6table2 typedef struct _MIB_TCP6TABLE2 { DWORD
|
|
|
|
|
// dwNumEntries; MIB_TCP6ROW2 table[ANY_SIZE]; } MIB_TCP6TABLE2, *PMIB_TCP6TABLE2;
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "3cb8568e-ce31-4ed1-aa9e-abcb826c0cea")]
|
|
|
|
|
[CorrespondingType(typeof(MIB_TCP6ROW2))]
|
|
|
|
|
[DefaultProperty(nameof(table))]
|
|
|
|
|
public class MIB_TCP6TABLE2 : SafeElementArray<MIB_TCP6ROW2, uint, CoTaskMemoryMethods>
|
|
|
|
|
{
|
|
|
|
|
/// <summary>Initializes a new instance of the <see cref="MIB_TCP6TABLE2"/> class.</summary>
|
|
|
|
|
/// <param name="byteSize">Amount of space, in bytes, to reserve.</param>
|
|
|
|
|
public MIB_TCP6TABLE2(uint byteSize) : base((int)byteSize, 0)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>A value that specifies the number of TCP connections in the array.</summary>
|
|
|
|
|
public uint dwNumEntries => Count;
|
|
|
|
|
|
|
|
|
|
/// <summary>An array of MIB_TCP6ROW2 structures containing TCP connection entries.</summary>
|
|
|
|
|
public MIB_TCP6ROW2[] table { get => Elements; set => Elements = value; }
|
|
|
|
|
|
|
|
|
|
/// <summary>Performs an implicit conversion from <see cref="MIB_TCP6TABLE2"/> to <see cref="System.IntPtr"/>.</summary>
|
|
|
|
|
/// <param name="table">The MIB_TCP6TABLE instance.</param>
|
|
|
|
|
/// <returns>The result of the conversion.</returns>
|
|
|
|
|
public static implicit operator IntPtr(MIB_TCP6TABLE2 table) => table.DangerousGetHandle();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>The <c>MIB_TCPTABLE</c> structure contains a table of TCP connections for IPv4 on the local computer.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The GetTcpTable function retrieves the IPv4 TCP connection table on the local computer and returns this information in a
|
|
|
|
|
/// <c>MIB_TCPTABLE</c> structure. An array of MIB_TCPROW structures are contained in the <c>MIB_TCPTABLE</c> structure.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCPTABLE</c> structure may contain padding for alignment between the <c>dwNumEntries</c> member and the first
|
|
|
|
|
/// MIB_TCPROW array entry in the <c>table</c> member. Padding for alignment may also be present between the <c>MIB_TCPROW</c> array
|
|
|
|
|
/// entries in the <c>table</c> member. Any access to a <c>MIB_TCPROW</c> array entry should assume padding may exist.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// On the Microsoft Windows Software Development Kit (SDK) released for Windows Vista and later, the organization of header files
|
|
|
|
|
/// has changed. This structure is defined in the Tcpmib.h header file, not in the Iprtrmib.h header file. Note that the Tcpmib.h
|
|
|
|
|
/// header file is automatically included in Iprtrmib.h, which is automatically included in the Iphlpapi.h header file. The Tcpmib.h
|
|
|
|
|
/// and Iprtrmib.h header files should never be used directly.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>Examples</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The following example retrieves the TCP connection table for IPv4 as a <c>MIB_TCPTABLE</c> structure and prints the state of each
|
|
|
|
|
/// connection represented as a MIB_TCPROW structure.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/api/tcpmib/ns-tcpmib-_mib_tcptable typedef struct _MIB_TCPTABLE
|
|
|
|
|
// { DWORD dwNumEntries; MIB_TCPROW table[ANY_SIZE]; } MIB_TCPTABLE, *PMIB_TCPTABLE;
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "a8ed8ac2-a72f-4099-ac99-a8b0b77b7b84")]
|
|
|
|
|
[CorrespondingType(typeof(MIB_TCPROW))]
|
|
|
|
|
[DefaultProperty(nameof(table))]
|
|
|
|
|
public class MIB_TCPTABLE : SafeElementArray<MIB_TCPROW, uint, CoTaskMemoryMethods>
|
|
|
|
|
{
|
|
|
|
|
/// <summary>Initializes a new instance of the <see cref="MIB_TCPTABLE"/> class.</summary>
|
|
|
|
|
/// <param name="byteSize">Amount of space, in bytes, to reserve.</param>
|
|
|
|
|
public MIB_TCPTABLE(uint byteSize) : base((int)byteSize, 0)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>The number of entries in the table.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwNumEntries => Count;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>A pointer to a table of TCP connections implemented as an array of MIB_TCPROW structures.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public MIB_TCPROW[] table { get => Elements; set => Elements = value; }
|
|
|
|
|
|
|
|
|
|
/// <summary>Performs an implicit conversion from <see cref="MIB_TCPTABLE"/> to <see cref="System.IntPtr"/>.</summary>
|
|
|
|
|
/// <param name="table">The MIB_TCPTABLE instance.</param>
|
|
|
|
|
/// <returns>The result of the conversion.</returns>
|
|
|
|
|
public static implicit operator IntPtr(MIB_TCPTABLE table) => table.DangerousGetHandle();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCPTABLE_OWNER_MODULE</c> structure contains a table of process IDs (PIDs) and the IPv4 TCP links context bound to the
|
|
|
|
|
/// PIDs, and any available ownership data.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// This table is specifically returned by a call to GetExtendedTcpTable with the TableClass parameter set to a
|
|
|
|
|
/// <c>TCP_TABLE_OWNER_MODULE_*</c> value from the TCP_TABLE_CLASS enumeration and the ulAf parameter set to <c>AF_INET4</c>.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCPTABLE_OWNER_MODULE</c> structure may contain padding for alignment between the <c>dwNumEntries</c> member and the
|
|
|
|
|
/// first MIB_TCPROW_OWNER_MODULE array entry in the <c>table</c> member. Padding for alignment may also be present between the
|
|
|
|
|
/// <c>MIB_TCPROW_OWNER_MODULE</c> array entries in the <c>table</c> member. Any access to a <c>MIB_TCPROW_OWNER_MODULE</c> array
|
|
|
|
|
/// entry should assume padding may exist.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// On the Microsoft Windows Software Development Kit (SDK) released for Windows Vista and later, the organization of header files
|
|
|
|
|
/// has changed. This structure is defined in the Tcpmib.h header file, not in the Iprtrmib.h header file. Note that the Tcpmib.h
|
|
|
|
|
/// header file is automatically included in Iprtrmib.h, which is automatically included in the Iphlpapi.h header file. The Tcpmib.h
|
|
|
|
|
/// and Iprtrmib.h header files should never be used directly.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/api/tcpmib/ns-tcpmib-_mib_tcptable_owner_module typedef struct
|
|
|
|
|
// _MIB_TCPTABLE_OWNER_MODULE { DWORD dwNumEntries; MIB_TCPROW_OWNER_MODULE table[ANY_SIZE]; } MIB_TCPTABLE_OWNER_MODULE, *PMIB_TCPTABLE_OWNER_MODULE;
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "d44c9d82-906b-43ea-8edd-cf973864668d")]
|
|
|
|
|
[CorrespondingType(typeof(MIB_TCPROW_OWNER_MODULE))]
|
|
|
|
|
[DefaultProperty(nameof(table))]
|
2019-04-24 10:37:19 -04:00
|
|
|
|
public class MIB_TCPTABLE_OWNER_MODULE : SafeElementArray<MIB_TCPROW_OWNER_MODULE, ulong, CoTaskMemoryMethods>
|
2019-04-18 22:39:42 -04:00
|
|
|
|
{
|
|
|
|
|
/// <summary>Initializes a new instance of the <see cref="MIB_TCPTABLE_OWNER_MODULE"/> class.</summary>
|
|
|
|
|
/// <param name="byteSize">Amount of space, in bytes, to reserve.</param>
|
|
|
|
|
public MIB_TCPTABLE_OWNER_MODULE(uint byteSize) : base((int)byteSize, 0)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>The number of MIB_TCPROW_OWNER_MODULE elements in the <c>table</c>.</para>
|
|
|
|
|
/// </summary>
|
2019-04-24 10:37:19 -04:00
|
|
|
|
public uint dwNumEntries => (uint)Count;
|
2019-04-18 22:39:42 -04:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Array of MIB_TCPROW_OWNER_MODULE structures returned by a call to GetExtendedTcpTable.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public MIB_TCPROW_OWNER_MODULE[] table { get => Elements; set => Elements = value; }
|
|
|
|
|
|
|
|
|
|
/// <summary>Performs an implicit conversion from <see cref="MIB_TCPTABLE_OWNER_MODULE"/> to <see cref="IntPtr"/>.</summary>
|
|
|
|
|
/// <param name="table">The MIB_TCPTABLE_OWNER_MODULE instance.</param>
|
|
|
|
|
/// <returns>The result of the conversion.</returns>
|
|
|
|
|
public static implicit operator IntPtr(MIB_TCPTABLE_OWNER_MODULE table) => table.DangerousGetHandle();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCPTABLE_OWNER_PID</c> structure contains a table of process IDs (PIDs) and the IPv4 TCP links that are context bound
|
|
|
|
|
/// to these PIDs.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// This table is specifically returned by a call to GetExtendedTcpTable with the TableClass parameter set to a
|
|
|
|
|
/// <c>TCP_TABLE_OWNER_PID_*</c> value from the TCP_TABLE_CLASS enumeration and the ulAf parameter set to <c>AF_INET4</c>.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCPTABLE_OWNER_PID</c> structure may contain padding for alignment between the <c>dwNumEntries</c> member and the
|
|
|
|
|
/// first MIB_TCPROW_OWNER_PID array entry in the <c>table</c> member. Padding for alignment may also be present between the
|
|
|
|
|
/// <c>MIB_TCPROW_OWNER_PID</c> array entries in the <c>table</c> member. Any access to a <c>MIB_TCPROW_OWNER_PID</c> array entry
|
|
|
|
|
/// should assume padding may exist.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// On the Microsoft Windows Software Development Kit (SDK) released for Windows Vista and later, the organization of header files
|
|
|
|
|
/// has changed. This structure is defined in the Tcpmib.h header file, not in the Iprtrmib.h header file. Note that the Tcpmib.h
|
|
|
|
|
/// header file is automatically included in Iprtrmib.h, which is automatically included in the Iphlpapi.h header file. The Tcpmib.h
|
|
|
|
|
/// and Iprtrmib.h header files should never be used directly.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/api/tcpmib/ns-tcpmib-_mib_tcptable_owner_pid typedef struct
|
|
|
|
|
// _MIB_TCPTABLE_OWNER_PID { DWORD dwNumEntries; MIB_TCPROW_OWNER_PID table[ANY_SIZE]; } MIB_TCPTABLE_OWNER_PID, *PMIB_TCPTABLE_OWNER_PID;
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "ef39b832-1f22-468a-8734-c7d9bd3ac965")]
|
|
|
|
|
[CorrespondingType(typeof(MIB_TCPROW_OWNER_PID))]
|
|
|
|
|
[DefaultProperty(nameof(table))]
|
|
|
|
|
public class MIB_TCPTABLE_OWNER_PID : SafeElementArray<MIB_TCPROW_OWNER_PID, uint, CoTaskMemoryMethods>
|
|
|
|
|
{
|
|
|
|
|
/// <summary>Initializes a new instance of the <see cref="MIB_TCPTABLE_OWNER_PID"/> class.</summary>
|
|
|
|
|
/// <param name="byteSize">Amount of space, in bytes, to reserve.</param>
|
|
|
|
|
public MIB_TCPTABLE_OWNER_PID(uint byteSize) : base((int)byteSize, 0)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>The number of MIB_TCPROW_OWNER_PID elements in the <c>table</c>.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public uint dwNumEntries => Count;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>Array of MIB_TCPROW_OWNER_PID structures returned by a call to GetExtendedTcpTable.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public MIB_TCPROW_OWNER_PID[] table { get => Elements; set => Elements = value; }
|
|
|
|
|
|
|
|
|
|
/// <summary>Performs an implicit conversion from <see cref="MIB_TCPTABLE_OWNER_PID"/> to <see cref="IntPtr"/>.</summary>
|
|
|
|
|
/// <param name="table">The MIB_TCPTABLE_OWNER_PID instance.</param>
|
|
|
|
|
/// <returns>The result of the conversion.</returns>
|
|
|
|
|
public static implicit operator IntPtr(MIB_TCPTABLE_OWNER_PID table) => table.DangerousGetHandle();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>The <c>MIB_TCPTABLE2</c> structure contains a table of IPv4 TCP connections on the local computer.</summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The GetTcpTable2function retrieves the IPv4 TCP connection table on the local computer and returns this information in a
|
|
|
|
|
/// <c>MIB_TCPTABLE2</c> structure. An array of MIB_TCPROW2 structures are contained in the <c>MIB_TCPTABLE2</c> structure.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The <c>MIB_TCPTABLE2</c> structure may contain padding for alignment between the <c>dwNumEntries</c> member and the first
|
|
|
|
|
/// MIB_TCPROW2 array entry in the <c>table</c> member. Padding for alignment may also be present between the <c>MIB_TCPROW2</c>
|
|
|
|
|
/// array entries in the <c>table</c> member. Any access to a <c>MIB_TCPROW2</c> array entry should assume padding may exist.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// <para>Examples</para>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// The following example retrieves the TCP connection table for IPv4 as a <c>MIB_TCPTABLE2</c> structure prints the state of each
|
|
|
|
|
/// connection represented as a MIB_TCPROW2 structure.
|
|
|
|
|
/// </para>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
// https://docs.microsoft.com/en-us/windows/desktop/api/tcpmib/ns-tcpmib-_mib_tcptable2 typedef struct _MIB_TCPTABLE2 { DWORD
|
|
|
|
|
// dwNumEntries; MIB_TCPROW2 table[ANY_SIZE]; } MIB_TCPTABLE2, *PMIB_TCPTABLE2;
|
|
|
|
|
[PInvokeData("tcpmib.h", MSDNShortId = "e07de994-0bd5-4d18-9012-8ff191dd6939")]
|
|
|
|
|
[CorrespondingType(typeof(MIB_TCPROW2))]
|
|
|
|
|
[DefaultProperty(nameof(table))]
|
|
|
|
|
public class MIB_TCPTABLE2 : SafeElementArray<MIB_TCPROW2, uint, CoTaskMemoryMethods>
|
|
|
|
|
{
|
|
|
|
|
/// <summary>Initializes a new instance of the <see cref="MIB_TCPTABLE2"/> class.</summary>
|
|
|
|
|
/// <param name="byteSize">Amount of space, in bytes, to reserve.</param>
|
|
|
|
|
public MIB_TCPTABLE2(uint byteSize) : base((int)byteSize, 0)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>The number of entries in the table.</summary>
|
|
|
|
|
public uint dwNumEntries => Count;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <para>A pointer to a table of TCP connections implemented as an array of MIB_TCPROW2 structures.</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public MIB_TCPROW2[] table { get => Elements; set => Elements = value; }
|
|
|
|
|
|
|
|
|
|
/// <summary>Performs an implicit conversion from <see cref="MIB_TCPTABLE2"/> to <see cref="System.IntPtr"/>.</summary>
|
|
|
|
|
/// <param name="table">The MIB_TCPTABLE instance.</param>
|
|
|
|
|
/// <returns>The result of the conversion.</returns>
|
|
|
|
|
public static implicit operator IntPtr(MIB_TCPTABLE2 table) => table.DangerousGetHandle();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|