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;
}