我正在尝试获取类似于我的c++服务窗口中的“资源监视器”中显示的统计数据。为此,我使用了https://docs.microsoft.com/en-gb/windows/win32/api/iphlpapi/nf-iphlpapi-getpertcp6connectionestats?redirectedfrom=MSDN中所示的示例。但是我被卡住了,因为SetPerTcpConnectionEStats和GetPerTcpConnectionEStats返回了错误代码1214。唯一的区别是btn。在上面提到的link和我的示例中的代码是,我不是在一个特定的本地和远程端口上工作,而是在tcp表中的所有条目上工作,但我认为这不会有什么不同。
有人能帮帮我吗?
发布于 2020-08-28 14:52:38
如果我处理所有的条目,我可以重现这个错误。根据您链接的示例,除了本地和远程端口之外,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;
}https://stackoverflow.com/questions/63621163
复制相似问题