我一直在尝试使用 GetIpNetEntry2 和 ResolveIpNetEntry2 函数从Windows 10(Enterprise 1803)上的Visual Studio 2017(SDK 8.1)中的IPv4获取MAC地址。我得到了:
运行时检查失败#2-变量'IpNetRow2'周围的堆栈已损坏。
通过以下功能结束:
static int GetMacAddress(SOCKADDR_IN ClientAddr)
{
MIB_IPNET_ROW2 IpNetRow2 = { 0 };
DWORD dwBestIfIndex = 0;
int nRet = -1;
// Retrieves the index of the interface that has the best route to the client IP address.
GetBestInterface(inet_addr(inet_ntoa(ClientAddr.sin_addr)), &dwBestIfIndex);
// Finds MAC address from the local computer
IpNetRow2.InterfaceIndex = dwBestIfIndex;
IpNetRow2.Address.si_family = AF_INET;
IpNetRow2.Address.Ipv4.sin_addr.s_addr = ClientAddr.sin_addr.S_un.S_addr;
nRet = GetIpNetEntry2(&IpNetRow2);
if (nRet != NO_ERROR)
{
// Could not find the MAC address in the cache, lets hit the wire.
nRet = ResolveIpNetEntry2(&IpNetRow2, NULL);
}
return nRet;
}
返回的结果在nRet
= 0和dwBestIfIndex
= 22时有效。
我已尽力寻找有关如何诊断问题的描述;但是我没有找到任何相关的解决方案。代码是如此简单,我对代码的哪一部分会导致此类问题有所了解。
答案 0 :(得分:0)
谢谢大家的帮助。对此,我真的非常感激。最终我明白了。这不是代码问题,而是配置问题。 Struct成员对齐(Visual Studio项目属性-> C / C ++->代码生成)设置为1个字节,这引起了问题。我将其更改回“默认”,然后异常消失了。吸取了教训。谢谢。