Я бы использовал функцию GetAdaptersAddresses()
окон, чтобы получить некоторую информацию об адаптерах компьютера. На этой странице MSDN есть большой пример того, как ее использовать. Но я использую C ++, поэтому я бы придерживался ключевого слова new
, а не malloc
(C native). Как я могу переписать части, которые используют malloc
с new
?
РЕДАКТИРОВАТЬ 1
std::vector<PIP_ADAPTER_ADDRESSES> buffer;
ULONG outBufferLen = 0;
if (GetAdaptersAddresses(AF_INET, GAA_FLAG_INCLUDE_PREFIX, NULL, NULL, &outBufferLen) == ERROR_BUFFER_OVERFLOW)
{
buffer.resize(outBufferLen);
PIP_ADAPTER_ADDRESSES addresses = reinterpret_cast<PIP_ADAPTER_ADDRESSES>(buffer.data());
if (GetAdaptersAddresses(AF_INET, GAA_FLAG_INCLUDE_PREFIX, NULL, addresses, &outBufferLen) == NO_ERROR)
{
for (; addresses != NULL; addresses = addresses->Next)
{
...
}
}
}
РЕДАКТИРОВАТЬ 2
ULONG outBufferLen = 0;
if (GetAdaptersAddresses(AF_INET, GAA_FLAG_INCLUDE_PREFIX, NULL, NULL, &outBufferLen) == ERROR_BUFFER_OVERFLOW)
{
PIP_ADAPTER_ADDRESSES p = new IP_ADAPTER_ADDRESSES[outBufferLen / sizeof(IP_ADAPTER_ADDRESSES)];
if (GetAdaptersAddresses(AF_INET, GAA_FLAG_INCLUDE_PREFIX, NULL, p, &outBufferLen) == NO_ERROR)
{
....
}
}