Я пытался использовать функции GetIpNetEntry2 и ResolveIpNetEntry2 для получения MAC-адреса из IPv4 в Visual Studio 2017 (SDK 8.1) в Windows 10 (Enterprise 1803). Я получаю:
Ошибка проверки времени выполнения # 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.
Я искал столько, сколько смогу, чтобы описать, как диагностировать проблему; Однако я не нашел никакого решения, которое имеет отношение к делу. Код настолько прост, и я имею представление о том, какая часть кода может вызвать такую проблему.