SetPerTcpConnectionEStats 和 GetPerTcpConnectionEStats 返回错误代码 1214(无效的 NETNAME)
SetPerTcpConnectionEStats and GetPerTcpConnectionEStats is returning error code 1214 (invalid NETNAME)
我正在尝试在我的 c++ 服务中获取类似于 windows 中“资源监视器”中显示的统计信息。为此,我使用了 https://docs.microsoft.com/en-gb/windows/win32/api/iphlpapi/nf-iphlpapi-getpertcp6connectionestats?redirectedfrom=MSDN 中显示的示例。但我被卡住了,因为 SetPerTcpConnectionEStats 和 GetPerTcpConnectionEStats 返回错误代码 1214。唯一的区别 btn。上面提到的示例中的代码 link 和我的是我不是在特定的本地和远程端口上工作,而是在 tcp table 中的所有条目上工作,但我认为这不应该有什么不同。
有人可以帮我吗?
如果我处理所有条目,我可以重现此错误。根据您链接的示例,除了本地和远程端口外,GetTcpRow
还有一个搜索参数 MIB_TCP_STATE_ESTAB
。该状态为TCP连接数据传输阶段的正常状态。
以下示例适合我。
DWORD RunEstatsTest(bool v6) //set as IPv4(FALSE)
{
PMIB_TCPTABLE tcpTable = NULL;
DWORD status, size = 0;
status = GetTcpTable(tcpTable, &size, TRUE);
if (status != ERROR_INSUFFICIENT_BUFFER) {
return status;
}
tcpTable = (PMIB_TCPTABLE)malloc(size);
if (tcpTable == NULL) {
return ERROR_OUTOFMEMORY;
}
status = GetTcpTable(tcpTable, &size, TRUE);
if (status != ERROR_SUCCESS) {
free(tcpTable);
return status;
}
for (int i = 0; i < tcpTable->dwNumEntries; i++) {
if (MIB_TCP_STATE_ESTAB == tcpTable->table[i].State)
{
ToggleAllEstats(&tcpTable->table[i], TRUE, v6);
GetAllEstats(&tcpTable->table[i], v6);
ToggleAllEstats(&tcpTable->table[i], FALSE, v6);
}
}
free(tcpTable);
return ERROR_SUCCESS;
}
我正在尝试在我的 c++ 服务中获取类似于 windows 中“资源监视器”中显示的统计信息。为此,我使用了 https://docs.microsoft.com/en-gb/windows/win32/api/iphlpapi/nf-iphlpapi-getpertcp6connectionestats?redirectedfrom=MSDN 中显示的示例。但我被卡住了,因为 SetPerTcpConnectionEStats 和 GetPerTcpConnectionEStats 返回错误代码 1214。唯一的区别 btn。上面提到的示例中的代码 link 和我的是我不是在特定的本地和远程端口上工作,而是在 tcp table 中的所有条目上工作,但我认为这不应该有什么不同。
有人可以帮我吗?
如果我处理所有条目,我可以重现此错误。根据您链接的示例,除了本地和远程端口外,GetTcpRow
还有一个搜索参数 MIB_TCP_STATE_ESTAB
。该状态为TCP连接数据传输阶段的正常状态。
以下示例适合我。
DWORD RunEstatsTest(bool v6) //set as IPv4(FALSE)
{
PMIB_TCPTABLE tcpTable = NULL;
DWORD status, size = 0;
status = GetTcpTable(tcpTable, &size, TRUE);
if (status != ERROR_INSUFFICIENT_BUFFER) {
return status;
}
tcpTable = (PMIB_TCPTABLE)malloc(size);
if (tcpTable == NULL) {
return ERROR_OUTOFMEMORY;
}
status = GetTcpTable(tcpTable, &size, TRUE);
if (status != ERROR_SUCCESS) {
free(tcpTable);
return status;
}
for (int i = 0; i < tcpTable->dwNumEntries; i++) {
if (MIB_TCP_STATE_ESTAB == tcpTable->table[i].State)
{
ToggleAllEstats(&tcpTable->table[i], TRUE, v6);
GetAllEstats(&tcpTable->table[i], v6);
ToggleAllEstats(&tcpTable->table[i], FALSE, v6);
}
}
free(tcpTable);
return ERROR_SUCCESS;
}