自学内容网 自学内容网

WindowsAPI|每天了解几个winAPI接口之网络配置相关文档Iphlpapi.h详细分析四

上一篇:WindowsAPI|每天了解几个winAPI接口之Iphlpapi.h网络配置相关文档详细分析三
如果有错误欢迎指正批评,在此只作为科普和参考。

AllocateAndGetTcpExTableFromStack&AllocateAndGetUdpExTableFromStack:用于获取TCP和UDP统计信息的API(已弃用)

#pragma region Desktop Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)

#if (NTDDI_VERSION < NTDDI_VISTA)
//
// Deprecated APIs, Added for documentation.
//

DWORD
AllocateAndGetTcpExTableFromStack(
    _Outptr_ PVOID         *ppTcpTable,
    _In_        BOOL          bOrder,
    _In_        HANDLE        hHeap,
    _In_        DWORD         dwFlags,
    _In_        DWORD         dwFamily
    );

DWORD
AllocateAndGetUdpExTableFromStack(
    _Outptr_ PVOID         *ppUdpTable,
    _In_        BOOL          bOrder,
    _In_        HANDLE        hHeap,
    _In_        DWORD         dwFlags,
    _In_        DWORD         dwFamily
    );

#endif // (NTDDI_VERSION < NTDDI_VISTA)

#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
#pragma endregion
  1. AllocateAndGetTcpExTableFromStack 函数:

    • 用途:这个函数用于从TCP堆栈中分配并获取扩展的TCP连接表。它提供了一个包含所有TCP连接的列表,包括每个连接的状态、本地和远程地址等详细信息。
    • 参数:
      • ppTcpTable:一个指向指针的指针,用于接收分配的TCP表的地址。
      • bOrder:一个布尔值,指定是否需要对返回的TCP表进行排序。
      • hHeap:一个句柄,指向用于分配内存的堆。如果为NULL,则使用进程的默认堆。
      • dwFlags:指定额外的选项,例如是否包括所有TCP连接或仅包括特定的连接。
      • dwFamily:指定地址族,可以是AF_INET(IPv4)或AF_INET6(IPv6)。
  2. AllocateAndGetUdpExTableFromStack 函数:

    • 用途:这个函数用于从UDP堆栈中分配并获取扩展的UDP端点表。它提供了一个包含所有UDP端点的列表,包括每个端点的本地地址等详细信息。
    • 参数:
      • ppUdpTable:一个指向指针的指针,用于接收分配的UDP表的地址。
      • bOrder:一个布尔值,指定是否需要对返回的UDP表进行排序。
      • hHeap:一个句柄,指向用于分配内存的堆。如果为NULL,则使用进程的默认堆。
      • dwFlags:指定额外的选项,例如是否包括所有UDP端点或仅包括特定的端点。
      • dwFamily:指定地址族,可以是AF_INET(IPv4)或AF_INET6(IPv6)。

这两个函数在Windows Vista之前的版本中被标记为已弃用,意味着它们可能不再被推荐使用,并且可能在未来的Windows版本中被移除或替换。开发者应该考虑使用更新的API来获取TCP和UDP的统计信息。

ppTcpTable和ppUdpTable都有哪些变量?

在您提供的代码片段中,ppTcpTableppUdpTable 是输出参数,它们是指向指针的指针,用于接收函数分配的内存地址,该内存中包含了TCP或UDP的统计信息表。这些表的具体结构取决于函数的实现和Windows版本。

对于 AllocateAndGetTcpExTableFromStack 函数,ppTcpTable 指向的是一个 MIB_TCPTABLE_OWNER_MODULE 结构的数组,其中包含了TCP连接的信息。每个 MIB_TCPTABLE_OWNER_MODULE 结构体包含以下信息:

  • dwNumEntries:指定数组中的TCP连接条目数。
  • table:一个数组,其中每个元素都是一个 MIB_TCPROW_OWNER_MODULE 结构,包含单个TCP连接的信息。

MIB_TCPROW_OWNER_MODULE 结构体包含以下信息:

  • dwState:TCP连接的状态。
  • dwLocalAddr:本地IP地址。
  • dwLocalPort:本地端口号。
  • dwRemoteAddr:远程IP地址。
  • dwRemotePort:远程端口号。
  • dwOwningPid:拥有该连接的进程ID。
  • dwFlags:连接的其他标志。

对于 AllocateAndGetUdpExTableFromStack 函数,ppUdpTable 指向的是一个 MIB_UDPTABLE_OWNER_MODULE 结构的数组,其中包含了UDP端点的信息。每个 MIB_UDPTABLE_OWNER_MODULE 结构体包含以下信息:

  • dwNumEntries:指定数组中的UDP端点条目数。
  • table:一个数组,其中每个元素都是一个 MIB_UDPROW_OWNER_MODULE 结构,包含单个UDP端点的信息。

MIB_UDPROW_OWNER_MODULE 结构体包含以下信息:

  • dwLocalAddr:本地IP地址。
  • dwLocalPort:本地端口号。
  • dwOwningPid:拥有该端点的进程ID。
  • dwFlags:端点的其他标志。

请注意,这些结构和函数在Windows Vista之前的版本中被标记为已弃用。在新的开发中,建议使用更新的API,如 GetTcpTable2GetUdpTable2,它们提供了更多的功能和更好的性能。这些新API返回的结构也有所不同,因此在使用时需要查阅最新的Windows文档以获取正确的结构和使用方法。

GetTcp6TableGetTcp6Table2用于获取IPv6协议栈上的TCP连接信息

#pragma region Desktop Family or OneCore Family or Games Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM | WINAPI_PARTITION_GAMES)

#ifdef _WS2IPDEF_
//
// The following definitions require Winsock2.
//

#if (NTDDI_VERSION >= NTDDI_VISTA)
IPHLPAPI_DLL_LINKAGE
ULONG
WINAPI
GetTcp6Table(
    _Out_writes_bytes_(*SizePointer)   PMIB_TCP6TABLE TcpTable,
    _Inout_                      PULONG         SizePointer,
    _In_                         BOOL           Order
    );

IPHLPAPI_DLL_LINKAGE
ULONG
WINAPI
GetTcp6Table2(
    _Out_writes_bytes_(*SizePointer)   PMIB_TCP6TABLE2 TcpTable,
    _Inout_                      PULONG          SizePointer,
    _In_                         BOOL            Order
    );

#endif // (NTDDI_VERSION >= NTDDI_VISTA)
  1. GetTcp6Table 函数:

    • 用途:此函数用于检索IPv6传输控制协议(TCP)连接的当前状态表。
    • 参数
      • TcpTable:一个指向MIB_TCP6TABLE结构的指针,该结构在函数返回时将包含TCP连接表。
      • SizePointer:一个指向ULONG的指针,该ULONG在函数调用前指定了TcpTable缓冲区的大小,在函数返回后指定了填充到缓冲区的实际字节数。
      • Order:一个布尔值,如果为TRUE,则返回的连接表将按本地IP地址和端口号排序;如果为FALSE,则不保证返回的顺序。
    • 返回值:返回一个ULONG值,表示调用的结果。如果成功,返回值是NO_ERROR(值为0);如果失败,返回值是错误代码。
  2. GetTcp6Table2 函数:

    • 用途:此函数是GetTcp6Table的扩展版本,用于检索IPv6 TCP连接的当前状态表,并允许调用者根据特定的接口索引或具有特定状态的连接来过滤结果。
    • 参数
      • TcpTable:一个指向MIB_TCP6TABLE2结构的指针,该结构在函数返回时将包含TCP连接表的详细信息。
      • SizePointer:一个指向ULONG的指针,该ULONG在函数调用前指定了TcpTable缓冲区的大小,在函数返回后指定了填充到缓冲区的实际字节数。
      • Order:一个布尔值,如果为TRUE,则返回的连接表将按本地IP地址和端口号排序;如果为FALSE,则不保证返回的顺序。
    • 返回值:返回一个ULONG值,表示调用的结果。如果成功,返回值是NO_ERROR(值为0);如果失败,返回值是错误代码。

这两个函数主要用于网络管理和诊断工具,它们可以提供系统中所有IPv6 TCP连接的快照,包括每个连接的状态、本地和远程端点地址等信息。这些信息对于分析网络性能、监控网络活动或诊断网络问题非常有用。

MIB_TCP6TABLE和MIB_TCP6TABLE2结构的指针包含的变量

MIB_TCP6TABLEMIB_TCP6TABLE2 是两个不同的结构体,它们用于存储IPv6 TCP连接表的信息。以下是这些结构体包含的变量:

MIB_TCP6TABLE 结构体:

这个结构体包含了IPv6 TCP连接的统计信息,但不包括每个连接的进程ID。

  • dwNumEntries:一个DWORD类型的成员,表示结构体中包含的TCP连接条目的数量。

  • table:一个数组,每个元素都是一个MIB_TCP6ROW结构体,包含了单个TCP连接的信息。

MIB_TCP6ROW 结构体包含了以下成员:

  • dwState:一个DWORD类型的成员,表示TCP连接的状态。
  • ucLocalAddr:一个BYTE[16]数组,表示本地IPv6地址。
  • dwLocalPort:一个DWORD类型的成员,表示本地端口号。
  • ucRemoteAddr:一个BYTE[16]数组,表示远程IPv6地址。
  • dwRemotePort:一个DWORD类型的成员,表示远程端口号。

MIB_TCP6TABLE2 结构体:

这个结构体是MIB_TCP6TABLE的扩展,它包含了每个TCP连接的进程ID信息。

  • dwNumEntries:一个DWORD类型的成员,表示结构体中包含的TCP连接条目的数量。

  • table:一个数组,每个元素都是一个MIB_TCP6ROW2结构体,包含了单个TCP连接的详细信息。

MIB_TCP6ROW2 结构体包含了以下成员:

  • dwState:一个DWORD类型的成员,表示TCP连接的状态。
  • ucLocalAddr:一个BYTE[16]数组,表示本地IPv6地址。
  • dwLocalPort:一个DWORD类型的成员,表示本地端口号。
  • ucRemoteAddr:一个BYTE[16]数组,表示远程IPv6地址。
  • dwRemotePort:一个DWORD类型的成员,表示远程端口号。
  • dwOwningPid:一个DWORD类型的成员,表示拥有该TCP连接的进程ID。

这些结构体提供了一种方式来获取系统中所有IPv6 TCP连接的快照,包括每个连接的状态、本地和远程端点地址以及(在MIB_TCP6TABLE2中)拥有该连接的进程ID。这些信息对于网络管理和诊断非常有用。

GetPerTcpConnectionEStats 和 SetPerTcpConnectionEStats:用于获取和设置特定TCP连接的扩展统计信息

#ifdef WINAPI

IPHLPAPI_DLL_LINKAGE
ULONG
WINAPI
GetPerTcpConnectionEStats(
    _In_ PMIB_TCPROW Row,
    _In_ TCP_ESTATS_TYPE EstatsType,
    _Out_writes_bytes_opt_(RwSize) PUCHAR Rw,
    _In_ ULONG RwVersion,
    _In_ ULONG RwSize,
    _Out_writes_bytes_opt_(RosSize) PUCHAR Ros,
    _In_ ULONG RosVersion,
    _In_ ULONG RosSize,
    _Out_writes_bytes_opt_(RodSize) PUCHAR Rod,
    _In_ ULONG RodVersion,
    _In_ ULONG RodSize
    );

IPHLPAPI_DLL_LINKAGE
ULONG
WINAPI
SetPerTcpConnectionEStats(
    _In_ PMIB_TCPROW Row,
    _In_ TCP_ESTATS_TYPE EstatsType,
    _In_reads_bytes_(RwSize) PUCHAR Rw,
    _In_ ULONG RwVersion,
    _In_ ULONG RwSize,
    _In_ ULONG Offset
    );

这两个函数,GetPerTcpConnectionEStatsSetPerTcpConnectionEStats,是Windows IP Helper API的一部分,用于获取和设置特定TCP连接的扩展统计信息。这些函数提供了对TCP连接的细粒度控制,允许开发者查询或修改连接的特定参数。下面是每个函数的详细解释:

GetPerTcpConnectionEStats 函数:

  • 用途:获取特定TCP连接的扩展统计信息。
  • 参数
    • Row:一个指向MIB_TCPROW结构的指针,该结构指定了要查询的TCP连接。
    • EstatsType:一个TCP_ESTATS_TYPE枚举值,指定要查询的统计类型。
    • Rw:一个指向缓冲区的指针,该缓冲区将接收查询结果。
    • RwVersion:指定Rw缓冲区的版本。
    • RwSize:指定Rw缓冲区的大小。
    • Ros:一个指向缓冲区的指针,该缓冲区将接收其他统计信息。
    • RosVersion:指定Ros缓冲区的版本。
    • RosSize:指定Ros缓冲区的大小。
    • Rod:一个指向缓冲区的指针,该缓冲区将接收其他数据。
    • RodVersion:指定Rod缓冲区的版本。
    • RodSize:指定Rod缓冲区的大小。
  • 返回值:返回一个ULONG值,表示调用的结果。如果成功,返回值是NO_ERROR(值为0);如果失败,返回值是错误代码。

SetPerTcpConnectionEStats 函数:

  • 用途:设置特定TCP连接的扩展统计信息。
  • 参数
    • Row:一个指向MIB_TCPROW结构的指针,该结构指定了要设置的TCP连接。
    • EstatsType:一个TCP_ESTATS_TYPE枚举值,指定要设置的统计类型。
    • Rw:一个指向缓冲区的指针,该缓冲区包含要设置的数据。
    • RwVersion:指定Rw缓冲区的版本。
    • RwSize:指定Rw缓冲区的大小。
    • Offset:指定在Rw缓冲区中开始设置操作的偏移量。
  • 返回值:返回一个ULONG值,表示调用的结果。如果成功,返回值是NO_ERROR(值为0);如果失败,返回值是错误代码。

这些函数允许开发者对特定TCP连接的性能参数进行细粒度的查询和修改,这对于网络性能调优和故障排除非常有用。例如,可以查询或设置TCP连接的拥塞控制算法参数、接收窗口大小等。

MIB_TCPROW结构的指针包含什么变量?

MIB_TCPROW 结构体是一个用于表示单个TCP连接的信息的数据结构。它通常用于网络管理工具和网络诊断应用程序。以下是 MIB_TCPROW 结构体包含的变量:

  • dwState:一个 DWORD 类型的成员,表示TCP连接的当前状态。状态可以是以下几种之一:MIB_TCP_STATE_CLOSEDMIB_TCP_STATE_LISTENMIB_TCP_STATE_SYN_SENTMIB_TCP_STATE_SYN_RCVDMIB_TCP_STATE_ESTABMIB_TCP_STATE_FIN_WAIT1MIB_TCP_STATE_FIN_WAIT2MIB_TCP_STATE_CLOSE_WAITMIB_TCP_STATE_CLOSINGMIB_TCP_STATE_LAST_ACKMIB_TCP_STATE_TIME_WAITMIB_TCP_STATE_DELETE_TCB

  • dwLocalAddr:一个 DWORD 类型的成员,表示本地端的IP地址。对于IPv4地址,这是IPv4地址的无符号整数表示。

  • dwLocalPort:一个 DWORD 类型的成员,表示本地端的端口号。

  • dwRemoteAddr:一个 DWORD 类型的成员,表示远程端的IP地址。对于IPv4地址,这是IPv4地址的无符号整数表示。

  • dwRemotePort:一个 DWORD 类型的成员,表示远程端的端口号。

请注意,MIB_TCPROW 结构体是特定于IPv4的。对于IPv6地址,需要使用 MIB_TCP6ROW 结构体。

在实际使用这些结构体时,通常会将它们包含在数组中,数组的每个元素代表一个TCP连接。数组通常被包含在 MIB_TCPTABLEMIB_TCP6TABLE 结构体中,这些结构体提供了整个TCP连接表的概览。

GetPerTcp6ConnectionEStats 和 SetPerTcp6ConnectionEStats:专门用于IPv6环境下的TCP连接

#ifdef _WS2IPDEF_

IPHLPAPI_DLL_LINKAGE
ULONG
WINAPI
GetPerTcp6ConnectionEStats(
    _In_ PMIB_TCP6ROW Row,
    _In_ TCP_ESTATS_TYPE EstatsType,
    _Out_writes_bytes_opt_(RwSize) PUCHAR Rw,
    _In_  ULONG RwVersion,
    _In_  ULONG RwSize,
    _Out_writes_bytes_opt_(RosSize) PUCHAR Ros,
    _In_  ULONG RosVersion,
    _In_  ULONG RosSize,
    _Out_writes_bytes_opt_(RodSize) PUCHAR Rod,
    _In_  ULONG RodVersion,
    _In_  ULONG RodSize
    );

IPHLPAPI_DLL_LINKAGE
ULONG
WINAPI
SetPerTcp6ConnectionEStats(
    _In_ PMIB_TCP6ROW Row,
    _In_ TCP_ESTATS_TYPE EstatsType,
    _In_reads_bytes_(RwSize) PUCHAR Rw,
    _In_ ULONG RwVersion,
    _In_ ULONG RwSize,
    _In_ ULONG Offset
    );

#endif // _WS2IPDEF_

#endif // WINAPI

这两个函数,GetPerTcp6ConnectionEStatsSetPerTcp6ConnectionEStats,是Windows IP Helper API的一部分,专门用于IPv6环境下的TCP连接。它们允许获取和设置特定IPv6 TCP连接的扩展统计信息。下面是每个函数的详细解释:

GetPerTcp6ConnectionEStats 函数:

  • 用途:获取特定IPv6 TCP连接的扩展统计信息。
  • 参数
    • Row:一个指向MIB_TCP6ROW结构的指针,该结构指定了要查询的TCP连接。
    • EstatsType:一个TCP_ESTATS_TYPE枚举值,指定要查询的统计类型。
    • Rw:一个指向缓冲区的指针,该缓冲区将接收查询结果。
    • RwVersion:指定Rw缓冲区的版本。
    • RwSize:指定Rw缓冲区的大小。
    • Ros:一个指向缓冲区的指针,该缓冲区将接收其他统计信息。
    • RosVersion:指定Ros缓冲区的版本。
    • RosSize:指定Ros缓冲区的大小。
    • Rod:一个指向缓冲区的指针,该缓冲区将接收其他数据。
    • RodVersion:指定Rod缓冲区的版本。
    • RodSize:指定Rod缓冲区的大小。
  • 返回值:返回一个ULONG值,表示调用的结果。如果成功,返回值是NO_ERROR(值为0);如果失败,返回值是错误代码。

SetPerTcp6ConnectionEStats 函数:

  • 用途:设置特定IPv6 TCP连接的扩展统计信息。
  • 参数
    • Row:一个指向MIB_TCP6ROW结构的指针,该结构指定了要设置的TCP连接。
    • EstatsType:一个TCP_ESTATS_TYPE枚举值,指定要设置的统计类型。
    • Rw:一个指向缓冲区的指针,该缓冲区包含要设置的数据。
    • RwVersion:指定Rw缓冲区的版本。
    • RwSize:指定Rw缓冲区的大小。
    • Offset:指定在Rw缓冲区中开始设置操作的偏移量。
  • 返回值:返回一个ULONG值,表示调用的结果。如果成功,返回值是NO_ERROR(值为0);如果失败,返回值是错误代码。

MIB_TCP6ROW 结构体:

  • 用途:表示单个IPv6 TCP连接的信息。
  • 成员变量
    • dwState:TCP连接的状态,如MIB_TCP_STATE_ESTAB(已建立)等。
    • ucLocalAddr:本地IPv6地址,是一个16字节的数组。
    • dwLocalScopeId:本地地址的作用域ID。
    • dwLocalPort:本地端口号。
    • ucRemoteAddr:远程IPv6地址,是一个16字节的数组。
    • dwRemoteScopeId:远程地址的作用域ID。
    • dwRemotePort:远程端口号。

这些函数和结构体提供了对IPv6 TCP连接的细粒度控制,允许开发者查询或修改连接的特定参数,这对于网络性能调优和故障排除非常有用。

GetOwnerModuleFromTcp6Entry:检索与特定 IPv6 TCP 连接关联的模块的所有者信息

IPHLPAPI_DLL_LINKAGE
DWORD
WINAPI
GetOwnerModuleFromTcp6Entry(
    _In_                      PMIB_TCP6ROW_OWNER_MODULE     pTcpEntry,
    _In_                      TCPIP_OWNER_MODULE_INFO_CLASS Class,
    _Out_writes_bytes_(*pdwSize)    PVOID                         pBuffer,
    _Inout_                   PDWORD                        pdwSize
    );

函数 GetOwnerModuleFromTcp6Entry 是 Windows IP Helper API 的一部分,用于检索与特定 IPv6 TCP 连接关联的模块的所有者信息。这个函数可以帮助确定哪个进程或模块拥有特定的 TCP 连接。

下面是该函数的参数说明:

  • pTcpEntry:一个指向 MIB_TCP6ROW_OWNER_MODULE 结构的指针,该结构包含了要查询的 IPv6 TCP 连接的信息。

  • Class:一个 TCPIP_OWNER_MODULE_INFO_CLASS 枚举值,指定了要检索的模块信息的类别。这个枚举可以有不同的值,例如 TcpipOwnerModuleInfoBasicTcpipOwnerModuleInfoEx,这取决于需要的信息级别。

  • pBuffer:一个指向缓冲区的指针,该缓冲区用于接收关于模块的所有者信息。根据 Class 参数的值,这个缓冲区可能包含不同类型的结构。

  • pdwSize:一个指向 DWORD 的指针,该 DWORD 在函数调用前指定了 pBuffer 缓冲区的大小。在函数返回时,它指定了写入 pBuffer 的数据的大小。

函数返回一个 DWORD 类型的值,表示函数调用的结果。如果函数调用成功,返回值通常是 NO_ERROR(值为0)。如果函数调用失败,则返回值是一个错误代码,可以用于诊断问题。

这个函数的使用场景包括但不限于网络安全监控、网络连接分析、或者在需要确定特定网络活动的所有者时调用。通过这个函数,开发者可以获取到哪个进程或模块负责特定的 TCP 连接,这对于网络管理和调试是非常有用的信息。

MIB_TCP6ROW_OWNER_MODULE 结构的指针包含的变量

MIB_TCP6ROW_OWNER_MODULE 结构体是一个用于存储IPv6 TCP连接信息的数据结构,其中包含了连接的本地和远程地址、端口号、状态、拥有该连接的进程ID以及创建时间戳等信息。具体来说,该结构体包含的变量如下:

  • ucLocalAddr:一个16字节的数组,存储本地IPv6地址。
  • dwLocalScopeId:一个DWORD类型的成员,表示本地地址的作用域ID。
  • dwLocalPort:一个DWORD类型的成员,表示本地端口号,以网络字节顺序存储。
  • ucRemoteAddr:一个16字节的数组,存储远程IPv6地址。
  • dwRemoteScopeId:一个DWORD类型的成员,表示远程地址的作用域ID。
  • dwRemotePort:一个DWORD类型的成员,表示远程端口号,以网络字节顺序存储。
  • dwState:一个DWORD类型的成员,表示TCP连接的状态,如MIB_TCP_STATE_ESTAB(已建立)等。
  • dwOwningPid:一个DWORD类型的成员,表示为此TCP连接发出上下文绑定的本地进程的进程ID(PID)。
  • liCreateTimestamp:一个LARGE_INTEGER类型的成员,表示创建此TCP连接的上下文绑定操作发生的时间戳。
  • OwningModuleInfo:一个ULONGLONG[TCPIP_OWNING_MODULE_SIZE]类型的数组,包含所有权信息的不透明数据。

这些信息对于网络管理和诊断非常有用,尤其是在需要确定哪个进程或模块拥有特定的TCP连接时。通过这些数据,开发者可以获取系统中所有IPv6 TCP连接的详细信息,包括每个连接的状态、本地和远程端点地址以及拥有该连接的进程ID。

GetUdp6Table:检索系统中活跃的 IPv6 UDP 端点的列表

IPHLPAPI_DLL_LINKAGE
ULONG
WINAPI
GetUdp6Table(
    _Out_writes_bytes_opt_(*SizePointer)   PMIB_UDP6TABLE Udp6Table,
    _Inout_                      PULONG         SizePointer,
    _In_                         BOOL           Order
    );

函数 GetUdp6Table 是 Windows IP Helper API 的一部分,它用于检索系统中活跃的 IPv6 UDP 端点的列表。这个函数可以被网络应用程序用来获取当前 UDP 连接的状态信息。

下面是该函数的参数说明:

  • Udp6Table:这是一个指向 MIB_UDP6TABLE 结构的指针,该结构在函数成功返回时将被填充为当前 IPv6 UDP 端点的列表。

  • SizePointer:这是一个指向 ULONG 类型的指针,该 ULONG 在函数调用前指定了 Udp6Table 缓冲区的大小。在函数返回时,它指定了填充到 Udp6Table 缓冲区的实际大小。如果提供的缓冲区大小不够,函数将返回 ERROR_INSUFFICIENT_BUFFER 错误,并且 SizePointer 将被设置为所需的最小缓冲区大小。

  • Order:这是一个 BOOL 类型的参数,指定是否需要对返回的 UDP 端点表进行排序。如果设置为 TRUE,则返回的表将按本地端点地址和端口号排序。

该函数返回一个 ULONG 类型的值,表示函数调用的结果。如果函数调用成功,返回值通常是 NO_ERROR(值为0)。如果函数调用失败,则返回值是一个错误代码,如 ERROR_INSUFFICIENT_BUFFER 表示提供的缓冲区太小,无法容纳整个表。

MIB_UDP6TABLE 结构包含了一个 dwNumEntries 成员,指示表中有多少个 UDP 端点条目,以及一个 table 数组,其中每个元素都是一个 MIB_UDP6ROW 结构,代表一个 UDP 端点。MIB_UDP6ROW 结构包含了以下信息:

  • dwLocalAddr:本地 IPv6 地址。
  • dwLocalScopeId:本地地址的作用域 ID。
  • dwLocalPort:本地端口号。
  • dwRemoteAddr:远程 IPv6 地址(对于客户端端口,这通常设置为 0)。
  • dwRemoteScopeId:远程地址的作用域 ID(对于客户端端口,这通常设置为 0)。
  • dwRemotePort:远程端口号(对于客户端端口,这通常设置为 0)。

使用 GetUdp6Table 函数可以帮助开发者和网络管理员了解当前系统中的 UDP 通信状态,这对于网络监控、故障排除和性能分析非常有用。

GetOwnerModuleFromUdp6Entry:检索与特定 IPv6 UDP 端点关联的模块的所有者信息

IPHLPAPI_DLL_LINKAGE
DWORD
WINAPI
GetOwnerModuleFromUdp6Entry(
    _In_                      PMIB_UDP6ROW_OWNER_MODULE     pUdpEntry,
    _In_                      TCPIP_OWNER_MODULE_INFO_CLASS Class,
    _Out_writes_bytes_(*pdwSize)    PVOID                         pBuffer,
    _Inout_                   PDWORD                        pdwSize
    );

#endif // _WS2IPDEF_

函数 GetOwnerModuleFromUdp6Entry 是 Windows IP Helper API 的一部分,它用于检索与特定 IPv6 UDP 端点关联的模块的所有者信息。这个函数可以帮助确定哪个进程或模块拥有特定的 UDP 端点。

下面是该函数的参数说明:

  • pUdpEntry:一个指向 MIB_UDP6ROW_OWNER_MODULE 结构的指针,该结构包含了要查询的 IPv6 UDP 端点的信息。

  • Class:一个 TCPIP_OWNER_MODULE_INFO_CLASS 枚举值,指定了要检索的模块信息的类别。这个枚举可以有不同的值,例如 TcpipOwnerModuleInfoBasicTcpipOwnerModuleInfoEx,这取决于需要的信息级别。

  • pBuffer:一个指向缓冲区的指针,该缓冲区用于接收关于模块的所有者信息。根据 Class 参数的值,这个缓冲区可能包含不同类型的结构。

  • pdwSize:一个指向 DWORD 的指针,该 DWORD 在函数调用前指定了 pBuffer 缓冲区的大小。在函数返回时,它指定了写入 pBuffer 的数据的大小。

函数返回一个 DWORD 类型的值,表示函数调用的结果。如果函数调用成功,返回值通常是 NO_ERROR(值为0)。如果函数调用失败,则返回值是一个错误代码,可以用于诊断问题。

MIB_UDP6ROW_OWNER_MODULE 结构体提供了特定 UDP 端点的详细信息,包括本地和远程 IPv6 地址、端口号以及拥有该端点的进程ID等。这个结构体的具体成员可能包括:

  • ucLocalAddr:本地 IPv6 地址。
  • dwLocalScopeId:本地地址的作用域 ID。
  • dwLocalPort:本地端口号。
  • ucRemoteAddr:远程 IPv6 地址(对于 UDP,这通常是0,因为 UDP 是无连接的)。
  • dwRemoteScopeId:远程地址的作用域 ID(对于 UDP,这通常是0)。
  • dwRemotePort:远程端口号(对于 UDP,这通常是0)。
  • dwOwningPid:拥有该 UDP 端点的进程的进程ID。

通过这个函数,开发者可以获取到哪个进程或模块负责特定的 UDP 端点,这对于网络管理和调试是非常有用的信息。


原文地址:https://blog.csdn.net/weixin_42964413/article/details/142997826

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!