(iptypes.h) IP_ADAPTER_ADDRESSES_LH 结构
IP_ADAPTER_ADDRESSES结构是特定适配器地址链接列表的标头节点。 此结构可以同时用作 IP_ADAPTER_ADDRESSES 结构链接列表的一部分。
语法
typedef struct _IP_ADAPTER_ADDRESSES_LH {
union {
ULONGLONG Alignment;
struct {
ULONG Length;
IF_INDEX IfIndex;
};
};
struct _IP_ADAPTER_ADDRESSES_LH *Next;
PCHAR AdapterName;
PIP_ADAPTER_UNICAST_ADDRESS_LH FirstUnicastAddress;
PIP_ADAPTER_ANYCAST_ADDRESS_XP FirstAnycastAddress;
PIP_ADAPTER_MULTICAST_ADDRESS_XP FirstMulticastAddress;
PIP_ADAPTER_DNS_SERVER_ADDRESS_XP FirstDnsServerAddress;
PWCHAR DnsSuffix;
PWCHAR Description;
PWCHAR FriendlyName;
BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
ULONG PhysicalAddressLength;
union {
ULONG Flags;
struct {
ULONG DdnsEnabled : 1;
ULONG RegisterAdapterSuffix : 1;
ULONG Dhcpv4Enabled : 1;
ULONG ReceiveOnly : 1;
ULONG NoMulticast : 1;
ULONG Ipv6OtherStatefulConfig : 1;
ULONG NetbiosOverTcpipEnabled : 1;
ULONG Ipv4Enabled : 1;
ULONG Ipv6Enabled : 1;
ULONG Ipv6ManagedAddressConfigurationSupported : 1;
};
};
ULONG Mtu;
IFTYPE IfType;
IF_OPER_STATUS OperStatus;
IF_INDEX Ipv6IfIndex;
ULONG ZoneIndices[16];
PIP_ADAPTER_PREFIX_XP FirstPrefix;
ULONG64 TransmitLinkSpeed;
ULONG64 ReceiveLinkSpeed;
PIP_ADAPTER_WINS_SERVER_ADDRESS_LH FirstWinsServerAddress;
PIP_ADAPTER_GATEWAY_ADDRESS_LH FirstGatewayAddress;
ULONG Ipv4Metric;
ULONG Ipv6Metric;
IF_LUID Luid;
SOCKET_ADDRESS Dhcpv4Server;
NET_IF_COMPARTMENT_ID CompartmentId;
NET_IF_NETWORK_GUID NetworkGuid;
NET_IF_CONNECTION_TYPE ConnectionType;
TUNNEL_TYPE TunnelType;
SOCKET_ADDRESS Dhcpv6Server;
BYTE Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH];
ULONG Dhcpv6ClientDuidLength;
ULONG Dhcpv6Iaid;
PIP_ADAPTER_DNS_SUFFIX FirstDnsSuffix;
} IP_ADAPTER_ADDRESSES_LH, *PIP_ADAPTER_ADDRESSES_LH;
成员
Alignment
类型: ULONGLONG
保留。 由编译器用于对齐结构。
Length
类型: ULONG
此结构的长度(以字节为单位)。 请注意, windows XP SP1 及更高版本以及 Windows Vista 及更高版本上IP_ADAPTER_ADDRESSES结构的长度已更改。
IfIndex
类型:DWORD
与这些地址关联的 IPv4 接口的索引。 在 Windows Server 2003 和 Windows XP 上,如果接口上没有可用的 IPv4,则此成员为零。
Next
类型: struct _IP_ADAPTER_ADDRESSES*
指向列表中下一个适配器的指针地址结构。
AdapterName
类型: PCHAR
包含与这些地址关联的适配器名称的字符数组。 与适配器的友好名称不同, AdapterName 中指定的适配器名称是永久性的,不能由用户修改。
FirstUnicastAddress
类型: PIP_ADAPTER_UNICAST_ADDRESS
指向适配器 IP 单播地址链接列表中的第一个 IP_ADAPTER_UNICAST_ADDRESS 结构的指针。
FirstAnycastAddress
类型: PIP_ADAPTER_ANYCAST_ADDRESS
指向适配器 IP 任意播地址链接列表中的第一个 IP_ADAPTER_ANYCAST_ADDRESS 结构的指针。
FirstMulticastAddress
类型: PIP_ADAPTER_MULTICAST_ADDRESS
指向适配器 IP 多播地址列表中第一个 IP_ADAPTER_MULTICAST_ADDRESS 结构的指针。
FirstDnsServerAddress
类型: PIP_ADAPTER_DNS_SERVER_ADDRESS
指向适配器 DNS 服务器地址链接列表中的第一个 IP_ADAPTER_DNS_SERVER_ADDRESS 结构的指针。
DnsSuffix
类型: PWCHAR
域名系统 (与此适配器关联的 DNS) 后缀。
Description
类型: PWCHAR
适配器的说明。 此成员是只读的。
FriendlyName
类型: PWCHAR
适配器的用户友好名称。 例如:“本地连接 1。此名称显示在 ipconfig 命令行程序和 Connection 文件夹等上下文中。 此成员是只读的,不能使用任何 IP 帮助程序函数进行修改。
此成员是 NDIS 使用的 ifAlias 字段,如 RFC 2863 中所述。 安装 NDIS 驱动程序时,NDIS 接口提供程序可以设置 ifAlias 字段。 对于 NDIS 微型端口驱动程序,此字段由 NDIS 设置。
PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]
类型: BYTE[MAX_ADAPTER_ADDRESS_LENGTH]
适配器的媒体访问控制 (MAC) 地址。 例如,在以太网网络上,此成员将指定以太网硬件地址。
PhysicalAddressLength
类型:DWORD
PhysicalAddress 成员中指定的地址的长度(以字节为单位)。 对于没有数据链接层的接口,此值为零。
Flags
类型:DWORD
一组为适配器指定各种设置的标志。 这些值在 Iptypes.h 头文件中定义。 可以组合这些标志位。
DdnsEnabled
RegisterAdapterSuffix
Dhcpv4Enabled
ReceiveOnly
NoMulticast
Ipv6OtherStatefulConfig
NetbiosOverTcpipEnabled
Ipv4Enabled
Ipv6Enabled
Ipv6ManagedAddressConfigurationSupported
Mtu
类型:DWORD
最大传输单位 (MTU) 大小(以字节为单位)。
IfType
类型:DWORD
Internet 分配名称机构 (IANA) 定义的接口类型。 Ipifcons.h 头文件中列出了接口类型的可能值。
下表列出了接口类型的常见值,尽管可能还有许多其他值。
值 | 含义 |
---|---|
|
其他一些类型的网络接口。 |
|
以太网网络接口。 |
|
令牌环网络接口。 |
|
PPP 网络接口。 |
|
软件环回网络接口。 |
|
ATM 网络接口。 |
|
IEEE 802.11 无线网络接口。
在 Windows Vista 及更高版本中,无线网卡报告为 IF_TYPE_IEEE80211。 在早期版本的 Windows 上,无线网卡报告为 IF_TYPE_ETHERNET_CSMACD。 在装有 SP3 的 Windows XP 和安装了 SP2 的 Windows XP 的 Windows XP 上的 SP2 x86 上, WlanEnumInterfaces 函数可用于枚举本地计算机上的无线接口。 |
|
隧道类型封装网络接口。 |
|
IEEE 1394 (Firewire) 高性能串行总线网络接口。 |
OperStatus
类型: IF_OPER_STATUS
RFC 2863 中定义的接口的操作状态。 有关详细信息,请参阅 http://www.ietf.org/rfc/rfc2863.txt。 此成员可以是 iftypes.h 头文件中定义的IF_OPER_STATUS枚举类型的值之一。 在 Windows Vista 及更高版本上,头文件已重新组织,此枚举在 Ifdef.h 头文件中定义。
Ipv6IfIndex
类型:DWORD
IPv6 IP 地址的接口索引。 如果 IPv6 在接口上不可用,则此成员为零。
ZoneIndices[16]
类型: DWORD[16]
用于组合 sockaddr 结构的每个范围级别的范围 ID 数组。 SCOPE_LEVEL 枚举用于为数组编制索引。 在 IPv6 上,可能会根据范围 ID 为单个接口分配多个 IPv6 多播地址。
FirstPrefix
类型: PIP_ADAPTER_PREFIX
指向适配器的 IP 适配器前缀链接列表中的第一个 IP_ADAPTER_PREFIX 结构的指针。
TransmitLinkSpeed
类型: ULONG64
适配器的传输链路的当前速度(以位/秒为单位)。
ReceiveLinkSpeed
类型: ULONG64
适配器的接收链接的当前速度(以位/秒为单位)。
FirstWinsServerAddress
类型: PIP_ADAPTER_WINS_SERVER_ADDRESS_LH
指向 Windows Internet 名称服务链接列表中的第一个 IP_ADAPTER_WINS_SERVER_ADDRESS 结构的指针, (适配器的 WINS) 服务器地址。
FirstGatewayAddress
类型: PIP_ADAPTER_GATEWAY_ADDRESS_LH
指向适配器网关链接列表中的第一个 IP_ADAPTER_GATEWAY_ADDRESS 结构的指针。
Ipv4Metric
类型: ULONG
适配器地址的 IPv4 接口指标。 此成员仅适用于 IPv4 适配器地址。
用于计算 IPv4 路由首选项的实际路由指标是MIB_IPFORWARD_ROW2结构的 Metric 成员中指定的路由指标偏移量的总和,以及此成员中为 IPv4 指定的接口指标。
Ipv6Metric
类型: ULONG
适配器地址的 IPv6 接口指标。 此成员仅适用于 IPv6 适配器地址。
用于计算 IPv6 路由首选项的实际路由指标是MIB_IPFORWARD_ROW2结构的 Metric 成员中指定的路由指标偏移量的总和,以及此成员中为 IPv4 指定的接口指标。
Luid
类型: IF_LUID
适配器地址的接口 LUID。
Dhcpv4Server
类型: SOCKET_ADDRESS
适配器地址的 DHCP 服务器的 IPv4 地址。 此成员仅适用于使用 DHCP 配置的 IPv4 适配器地址。
CompartmentId
类型: NET_IF_COMPARTMENT_ID
适配器地址的路由隔离舱 ID。
NetworkGuid
类型: NET_IF_NETWORK_GUID
与接口所属的网络关联的 GUID 。
如果接口提供程序无法提供网络 GUID,则此成员可以是零 GUID。 在这种情况下,接口由 NDIS 在默认网络中注册。
ConnectionType
类型: NET_IF_CONNECTION_TYPE
适配器地址的接口连接类型。
此成员可以是 Ifdef.h 头文件中定义的 NET_IF_CONNECTION_TYPE 枚举类型的值之一。
TunnelType
类型: TUNNEL_TYPE
如果适配器地址为隧道,则为隧道使用的封装方法。
Dhcpv6Server
类型: SOCKET_ADDRESS
适配器地址的 DHCPv6 服务器的 IPv6 地址。 此成员仅适用于使用 DHCPv6 配置的 IPv6 适配器地址。 此结构成员当前不受支持,保留供将来使用。
Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH]
类型: BYTE[MAX_DHCPV6_DUID_LENGTH]
DHCP 唯一标识符 (DHCPv6 客户端的 DUID) 。 此成员仅适用于使用 DHCPv6 配置的 IPv6 适配器地址。
Dhcpv6ClientDuidLength
类型: ULONG
DHCPv6 客户端的 DHCP 唯一标识符 (DUID) 的长度(以字节为单位)。 此成员仅适用于使用 DHCPv6 配置的 IPv6 适配器地址。
Dhcpv6Iaid
类型: ULONG
DHCPv6 客户端选择的标识关联的标识符。 此成员仅适用于使用 DHCPv6 配置的 IPv6 适配器地址。
FirstDnsSuffix
类型: PIP_ADAPTER_DNS_SUFFIX
指向适配器 DNS 后缀链接列表中的第一个 IP_ADAPTER_DNS_SUFFIX 结构的指针。
注解
GetAdaptersAddresses 函数检索 IPv4 和 IPv6 地址的信息,并将此信息作为IP_ADAPTER_ADDRESSES结构的链接列表返回
IfIndex 和 Ipv6IfIndex 成员中指定的适配器索引值可能会在禁用然后启用适配器时发生更改,或者在其他情况下,不应被视为永久性。
IfType 成员的值在 Ipifcons.h 头文件中定义。 当前仅支持 IfType 成员的说明中列出的可能值。
windows XP SP1 及更高版本上 IP_ADAPTER_ADDRESSES 结构的大小已更改。 Windows Vista 及更高版本上 IP_ADAPTER_ADDRESSES 结构的大小也发生了变化。 在 Windows Vista SP1 及更高版本以及 Windows Server 2008 及更高版本上, IP_ADAPTER_ADDRESSES 结构的大小也发生了变化。 应使用 Length 成员来确定正在使用哪个版本的 IP_ADAPTER_ADDRESSES 结构。
Windows XP 上的 IP_ADAPTER_ADDRESSES 结构版本 SP1 及更高版本添加了以下新成员: Ipv6IfIndex、 ZoneIndices 和 FirstPrefix。
Windows Vista 和更高版本上的 IP_ADAPTER_ADDRESSES 结构版本添加了以下新成员: TransmitLinkSpeed、 ReceiveLinkSpeed、 FirstWinsServerAddress、 FirstGatewayAddress、 Ipv4Metric、 Ipv6Metric、 Luid、 Dhcpv4Server、 CompartmentId、 NetworkGuid、 ConnectionType、 TunnelType、 Dhcpv6Server、 Dhcpv6ClientDuid、 Dhcpv6ClientDuidLength 和 Dhcpv6Iaid。
Windows Vista SP1 及更高版本以及 Windows Server 2008 及更高版本上 IP_ADAPTER_ADDRESSES 结构的版本添加了以下新成员: FirstDnsSuffix。
Ipv4Metric 和 Ipv6Metric 成员用于为连接到本地计算机上的多个接口的路由设置路由指标的优先级。
由 GetAdaptersAddresses 函数返回的 FirstUnicastAddress 成员指向的链接IP_ADAPTER_UNICAST_ADDRESS结构的顺序并不反映 IP 地址添加到适配器的顺序,并且可能因 Windows 版本而异。 同样,FirstAnycastAddress 成员指向的链接IP_ADAPTER_ANYCAST_ADDRESS结构的顺序和 FirstMulticastAddress 成员指向的链接IP_ADAPTER_MULTICAST_ADDRESS结构的顺序并不反映 IP 地址添加到适配器的顺序,并且可能因 Windows 版本而异。
此外,由 FirstUnicastAddress 成员指向的链接IP_ADAPTER_UNICAST_ADDRESS结构和 FirstPrefix 成员指向的链接IP_ADAPTER_PREFIX结构由操作系统作为单独的内部链接列表进行维护。 因此,FirstUnicastAddress 成员指向的链接IP_ADAPTER_UNICAST_ADDRESS结构的顺序与 FirstPrefix 成员所指向的链接IP_ADAPTER_PREFIX结构的顺序没有任何关系。
在 Windows Vista 及更高版本上,FirstPrefix 成员指向的链接IP_ADAPTER_PREFIX结构包括分配给适配器的每个 IP 地址的三个 IP 适配器前缀。 其中包括主机 IP 地址前缀、子网 IP 地址前缀和子网广播 IP 地址前缀。 此外,每个适配器都有一个多播地址前缀和一个广播地址前缀。
在具有 SP1 及更高版本 Windows Vista 的 Windows XP 上,FirstPrefix 成员指向的链接IP_ADAPTER_PREFIX结构仅包含分配给适配器的每个 IP 地址的单个 IP 适配器前缀。
在 Windows SDK 中,用于 Windows Vista 及更高版本的 结构的版本定义为 IP_ADAPTER_ADDRESSES_LH。 在 Microsoft Windows 软件开发工具包 (SDK) 中,此结构的版本将用于早期系统(包括 Windows XP SP1 及更高版本)定义为 IP_ADAPTER_ADDRESSES_XP。 编译应用程序时,如果目标平台是 Windows Vista 且更高版本 (NTDDI_VERSION >= NTDDI_LONGHORN
、 _WIN32_WINNT >= 0x0600
或 WINVER >= 0x0600
) ,则 IP_ADAPTER_ADDRESSES_LH 结构的类型为 IP_ADAPTER_ADDRESSES 结构。 如果目标平台不是 Windows Vista 及更高版本,则编译应用程序时, IP_ADAPTER_ADDRESSES_XP 结构的类型为 IP_ADAPTER_ADDRESSES 结构。
SOCKET_ADDRESS 结构在 IP_ADAPTER_ADDRESSES 结构中使用。 在为 Windows Vista 及更高版本发布的 Windows SDK 上,头文件的组织已更改, SOCKET_ADDRESS 结构在 Ws2def.h 头文件中定义,该文件由 Winsock2.h 头文件自动包含。 在针对 Windows Server 2003 和 Windows XP 发布的平台软件开发工具包 (SDK) 上, SOCKET_ADDRESS 结构在 Winsock2.h 头文件中声明。 若要使用 IP_ADAPTER_ADDRESSES 结构,必须在 Iphlpapi.h 头文件之前包含 Winsock2.h 头文件。
示例
此示例检索与系统关联的适配器 的IP_ADAPTER_ADDRESSES 结构,并为每个适配器接口打印一些成员。
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#pragma comment(lib, "IPHLPAPI.lib")
#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
/* Note: could also use malloc() and free() */
int __cdecl main(int argc, char **argv)
{
/* Declare and initialize variables */
DWORD dwSize = 0;
DWORD dwRetVal = 0;
unsigned int i = 0;
// Set the flags to pass to GetAdaptersAddresses
ULONG flags = GAA_FLAG_INCLUDE_PREFIX;
// default to unspecified address family (both)
ULONG family = AF_UNSPEC;
LPVOID lpMsgBuf = NULL;
PIP_ADAPTER_ADDRESSES pAddresses = NULL;
ULONG outBufLen = 0;
PIP_ADAPTER_ADDRESSES pCurrAddresses = NULL;
PIP_ADAPTER_UNICAST_ADDRESS pUnicast = NULL;
PIP_ADAPTER_ANYCAST_ADDRESS pAnycast = NULL;
PIP_ADAPTER_MULTICAST_ADDRESS pMulticast = NULL;
IP_ADAPTER_DNS_SERVER_ADDRESS *pDnServer = NULL;
IP_ADAPTER_PREFIX *pPrefix = NULL;
if (argc != 2) {
printf(" Usage: getadapteraddresses family\n");
printf(" getadapteraddresses 4 (for IPv4)\n");
printf(" getadapteraddresses 6 (for IPv6)\n");
printf(" getadapteraddresses A (for both IPv4 and IPv6)\n");
exit(1);
}
if (atoi(argv[1]) == 4)
family = AF_INET;
else if (atoi(argv[1]) == 6)
family = AF_INET6;
outBufLen = sizeof (IP_ADAPTER_ADDRESSES);
pAddresses = (IP_ADAPTER_ADDRESSES *) MALLOC(outBufLen);
// Make an initial call to GetAdaptersAddresses to get the
// size needed into the outBufLen variable
if (GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen)
== ERROR_BUFFER_OVERFLOW) {
FREE(pAddresses);
pAddresses = (IP_ADAPTER_ADDRESSES *) MALLOC(outBufLen);
}
if (pAddresses == NULL) {
printf("Memory allocation failed for IP_ADAPTER_ADDRESSES struct\n");
exit(1);
}
// Make a second call to GetAdaptersAddresses to get the
// actual data we want
printf("Memory allocated for GetAdapterAddresses = %d bytes\n", outBufLen);
printf("Calling GetAdaptersAddresses function with family = ");
if (family == AF_INET)
printf("AF_INET\n");
if (family == AF_INET6)
printf("AF_INET6\n");
if (family == AF_UNSPEC)
printf("AF_UNSPEC\n\n");
dwRetVal =
GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen);
if (dwRetVal == NO_ERROR) {
// If successful, output some information from the data we received
pCurrAddresses = pAddresses;
while (pCurrAddresses) {
printf("\tLength of the IP_ADAPTER_ADDRESS struct: %ld\n",
pCurrAddresses->Length);
printf("\tIfIndex (IPv4 interface): %u\n", pCurrAddresses->IfIndex);
printf("\tAdapter name: %s\n", pCurrAddresses->AdapterName);
pUnicast = pCurrAddresses->FirstUnicastAddress;
if (pUnicast != NULL) {
for (i = 0; pUnicast != NULL; i++)
pUnicast = pUnicast->Next;
printf("\tNumber of Unicast Addresses: %d\n", i);
} else
printf("\tNo Unicast Addresses\n");
pAnycast = pCurrAddresses->FirstAnycastAddress;
if (pAnycast) {
for (i = 0; pAnycast != NULL; i++)
pAnycast = pAnycast->Next;
printf("\tNumber of Anycast Addresses: %d\n", i);
} else
printf("\tNo Anycast Addresses\n");
pMulticast = pCurrAddresses->FirstMulticastAddress;
if (pMulticast) {
for (i = 0; pMulticast != NULL; i++)
pMulticast = pMulticast->Next;
printf("\tNumber of Multicast Addresses: %d\n", i);
} else
printf("\tNo Multicast Addresses\n");
pDnServer = pCurrAddresses->FirstDnsServerAddress;
if (pDnServer) {
for (i = 0; pDnServer != NULL; i++)
pDnServer = pDnServer->Next;
printf("\tNumber of DNS Server Addresses: %d\n", i);
} else
printf("\tNo DNS Server Addresses\n");
printf("\tDNS Suffix: %wS\n", pCurrAddresses->DnsSuffix);
printf("\tDescription: %wS\n", pCurrAddresses->Description);
printf("\tFriendly name: %wS\n", pCurrAddresses->FriendlyName);
if (pCurrAddresses->PhysicalAddressLength != 0) {
printf("\tPhysical address: ");
for (i = 0; i < pCurrAddresses->PhysicalAddressLength;
i++) {
if (i == (pCurrAddresses->PhysicalAddressLength - 1))
printf("%.2X\n",
(int) pCurrAddresses->PhysicalAddress[i]);
else
printf("%.2X-",
(int) pCurrAddresses->PhysicalAddress[i]);
}
}
printf("\tFlags: %ld\n", pCurrAddresses->Flags);
printf("\tMtu: %lu\n", pCurrAddresses->Mtu);
printf("\tIfType: %ld\n", pCurrAddresses->IfType);
printf("\tOperStatus: %ld\n", pCurrAddresses->OperStatus);
printf("\tIpv6IfIndex (IPv6 interface): %u\n",
pCurrAddresses->Ipv6IfIndex);
printf("\tZoneIndices (hex): ");
for (i = 0; i < 16; i++)
printf("%lx ", pCurrAddresses->ZoneIndices[i]);
printf("\n");
pPrefix = pCurrAddresses->FirstPrefix;
if (pPrefix) {
for (i = 0; pPrefix != NULL; i++)
pPrefix = pPrefix->Next;
printf("\tNumber of IP Adapter Prefix entries: %d\n", i);
} else
printf("\tNo IP Adapter Prefix entries\n");
printf("\n");
pCurrAddresses = pCurrAddresses->Next;
}
} else {
printf("Call to GetAdaptersAddresses failed with error: %d\n",
dwRetVal);
if (dwRetVal == ERROR_NO_DATA)
printf("\tNo addresses were found for the requested parameters\n");
else {
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwRetVal, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) & lpMsgBuf, 0, NULL)) {
printf("\tError: %s", lpMsgBuf);
LocalFree(lpMsgBuf);
FREE(pAddresses);
exit(1);
}
}
}
FREE(pAddresses);
return 0;
}
要求
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
标头 | iptypes.h (包括 Iphlpapi.h) |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈