微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SetPerTcpConnectionEStats和GetPerTcpConnectionEStats返回错误代码1214无效的NETNAME

如何解决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 举报,一经查实,本站将立刻删除。