Подробнее о адаптерах в Windows читайте "Шаг 56 - Установка сетевой карты". Так как адаптеров может быть много, то надо как-то научиться их перебирать. С адаптерами работает интерфейс NDIS, это самый нижний уровень. Дальше драйвер сетевой карты. А вот над этим интерфейсом как раз и находиться NetBios вот с помощью него мы попробуем получить этот список. Ниже я приведу часть схемы которую я постепенно делаю связанную с данным вопросом. Как только схема будет готова Вы увидите ее на сейте, а пока вот кусок.
Итак, среди команд NetBios есть одна связанная с данным вопросом правда как написано не стандартная NCBENUM. Microsoft как всегда что то там рассказывает о Windows NT, а нам все равно правда?
Получение информации о адаптере взято из "Шаг 1 - Установка драйвера принтера":
#include "stdafx.h" #include "windows.h" #include "nb30.h" #include "iostream.h" #include "mbstring.h" #pragma comment(lib,"Netapi32.lib") typedef struct _ASTAT_ { ADAPTER_STATUS adapt; NAME_BUFFER NameBuff[30]; }Adapter; void main() { NCB ncb; UCHAR uRetCode; LANA_ENUM la; memset( &ncb,0,sizeof(ncb)); ncb.ncb_command = NCBENUM; ncb.ncb_buffer=(unsigned char *) &la; ncb.ncb_length = sizeof(LANA_ENUM ); uRetCode = Netbios((NCB*) &ncb ); if ( uRetCode == NRC_GOODRET ) { cout << "Ok" << endl; for (int x=0;x<la.length;x++) { cout << "Adapter " << x << " - INFO - " << endl; memset( &ncb, 0, sizeof(ncb) ); // Это из первого шага ncb.ncb_command = NCBASTAT; ncb.ncb_lana_num = la.lana[x]; // это наш номер _mbscpy( ncb.ncb_callname,(UCHAR*)"* "); Adapter a1; ncb.ncb_buffer = (unsigned char *) &a1; ncb.ncb_length = sizeof(a1); uRetCode = Netbios((NCB*) &ncb ); if ( uRetCode == NRC_GOODRET ) { printf( "The Ethernet Number is: %02x%02x%02x%02x%02x%02x\n", a1.adapt.adapter_address[0], a1.adapt.adapter_address[1], a1.adapt.adapter_address[2], a1.adapt.adapter_address[3], a1.adapt.adapter_address[4], a1.adapt.adapter_address[5] ); } else cout << "error read" << endl; // конец кода первого шага } } else cout << uRetCode; }
Все как всегда разве структура новая. Запускаем смотрим:
Номеров три. И адаптеров три, только два номера похожи. Последний номер - это контролер удаленного доступа. А вот один из похожих - это сетевая карта и ИК порт, который Plug&Play в самом хорошем понимании, не спрашивая никого устанавливается при первом удобном случае. Вообще работает все это. Кстати Netapi32 использует NetBios.dll сама по себе ничего не делая.