【发布时间】:2019-02-25 20:43:07
【问题描述】:
我正在尝试执行SetIpInterfaceEntry 函数,但我总是得到ERROR_INVALID_PARAMETER 结果。我想更改哪个确切的参数并不重要,因为即使我没有更改任何内容,我也会收到此错误。这是 C++ 代码示例,它没有改变任何内容,但输出始终相同:
// Initialize MIB_IPINTERFACE_ROW with actual InterfaceLuid:
auto row = MIB_IPINTERFACE_ROW{ AF_INET, 1689399632855040 };
auto result = GetIpInterfaceEntry(&row);
// Just to confirm GetIpInterfaceEntry success print result and InterfaceIndex:
std::cout << "GetIpInterfaceEntry result: " << result << "; InterfaceIndex: " << row.InterfaceIndex << std::endl;
// Try to execute SetIpInterfaceEntry, without any change:
result = SetIpInterfaceEntry(&row);
// Result is always ERROR_INVALID_PARAMETER (87):
std::cout << "SetIpInterfaceEntry result: " << result << std::endl;
这是之前sn-p的输出:
GetIpInterfaceEntry result: 0; InterfaceIndex: 13
SetIpInterfaceEntry result: 87
根据the doc,ERROR_INVALID_PARAMETER的可能原因有:
传递给函数的参数无效。如果在 Row 参数中传递了
NULL指针,则返回此错误Row 参数指向的MIB_IPINTERFACE_ROW的InterfaceIndex成员未指定。
在我的情况下,这两者都不是真的(我刚刚得到了实际的结构)。
我的问题很明显:我做错了什么?该方法可以调用哪种接口有什么限制吗? (我打电话给实体。)还有其他建议吗?
谢谢!
更新:我忘了说,如果你想执行这段代码 sn-p 你应该:
#include <winsock2.h>
#include <netioapi.h>
还有链接iphlpapi.lib。
【问题讨论】:
-
如果
row.Family被指定为AF_INET6会发生什么? -
我无法用你的代码重现它,
SetIpInterfaceEntry刚刚在 win10,1809 上成功(返回 0),构建 17763。你能提供你的环境信息吗?