Похоже, вам не хватает этой части примера кода.
if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
FREE(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(ulOutBufLen);
if (pAdapterInfo == NULL) {
printf("Error allocating memory needed to call GetAdaptersinfo\n");
return 1;
}
}
Этот код вызывает GetAdaptersInfo
с одним выделенным адаптером. Это существенно оптимизирует для случая, когда на машине есть только один адаптер. В случае, если он получает возврат ERROR_BUFFER_OVERFLOW
, он изменяет свой размер, указанный в ulOutBufLen
(обновляется вызовом функции).
Это строка, которая изменяет объем памяти, выделенной для нескольких адаптеров.
pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(ulOutBufLen);
РЕДАКТИРОВАТЬ
После прочтения комментария Стива я посмотрел немного ближе, и кажется, что код неправильно вызывает функцию GetAdaptersInfo
дважды. В случае 1 адаптера первый вызов может потенциально привести к успеху, устраняя необходимость во втором вызове.