Windows — получить MAC-адреса беспроводных адаптеров в C ++ на WinXP и выше

Я хотел бы иметь выше.
Я нашел IP Helper API, и он работает. Единственная проблема заключается в том, что в системах старше Vista я не могу определить, является ли адаптер беспроводным или обычным Ethernet.
Мне также нужно поддерживать WinXP и Server 2003.

Вот соответствующая цитата из документации (IP Helper):

Интерфейс беспроводной сети IEEE 802.11.
Примечание. Этот тип адаптера возвращается в Windows Vista и более поздних версиях. В Windows Server 2003 и> Windows XP интерфейс беспроводной сети IEEE 802.11 возвращает тип адаптера> MIB_IF_TYPE_ETHERNET.

Итак, что является хорошим способом идентифицировать беспроводные адаптеры и получить их MAC-адреса на WinXP / Server2003 и позже?

1

Решение

GetAdapterAddresses является частью интерфейса Windows API и должен предоставлять вам как информацию о MAC-адресах, так и тип NIC.

Вызов возвращает структуру, указывающую на связанный список адаптеров.

Убедитесь, что вы не жестко задаете размер структуры для обеспечения переносимости между версиями Windows, потому что IP_ADAPTER_ADDRESSES структура изменилась размер между версиями.

Редактировать:

Это, очевидно, дает вам только MAC-адрес, так как он сообщает только правильный тип после Vista

Но,
GetIfTable возвращает MIB_IFTABLE структура, из этого вы можете прочитать MIB_IFROW который имеет dwType, который может иметь тип IF_TYPE_IEEE80211 или нет. Это не имеет никаких замечаний, что это особенно для Vista и должно быть действительно для XP, если MS не испортила их документацию.

У обоих из них должен быть физический адрес, поэтому вы должны быть в состоянии сопоставить эти две записи, чтобы идентифицировать одну карту.

0

Другие решения

Если вы собираетесь поддерживать XP с нуля, это было до того, как API-интерфейс Native Wifi был представлен в XP (SP 2). & 3 поддержка Native Wifi API).

Я думаю, что все еще может быть возможность через WMI. Вы могли бы создать Win32_NetworkAdapter (Устаревший класс WMI) В этом классе вы должны быть в состоянии извлечь AdapterTypeID который говорит, если это беспроводное устройство или нет, и MACAddress который дает вам MAC-адрес.

Поэтому я думаю, что вы выбрали либо поддержку Windows XP SP 2 и выше, либо интеграцию с WMI и устаревшим классом. Похоже, в любом случае есть верблюды, которых можно проглотить.

0

По вопросам рекламы [email protected]