如何解决SetPerTcpConnectionEStats和GetPerTcpConnectionEStats返回错误代码1214无效的NETNAME
我正在尝试获取类似于c ++服务中Windows中“资源监视器”中显示的统计信息。为此,我使用了https://docs.microsoft.com/en-gb/windows/win32/api/iphlpapi/nf-iphlpapi-getpertcp6connectionestats?redirectedfrom=MSDN所示的示例。但是我被困住了,因为SetPerTcpConnectionestats和GetPerTcpConnectionestats返回的错误代码为1214。唯一的区别是btn。上面提到的链接和我的示例中的代码是,我不是在特定的本地和远程端口上工作,而是在tcp表中的所有条目上工作,但我认为这没有什么区别。
有人可以帮我吗?
解决方法
如果我处理所有条目,则可以重现此错误。根据您链接的样本,除了本地端口和远程端口之外,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,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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。