- iphlpapi.h
netlistmgr.h
Код: Выделить всё
Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
My Tunnel TAP-Windows Adapter V9 #2 40 Disconnected 00-FF-E6-0A-89-C6 1 Gbps
Ethernet 4 Intel(R) PRO/1000 MT Desktop Adapter #2 30 Up 08-00-27-95-74-A2 1 Gbps
Local Area Connection TAP-Windows Adapter V9 15 Disconnected 00-FF-CC-95-DA-46 1 Gbps
Ethernet 3 Intel(R) PRO/1000 MT Desktop Adapter 4 Up 08-00-27-AC-C1-5A 1 Gbps
Код: Выделить всё
CoInitializeEx(NULL, COINITBASE_MULTITHREADED);
// get a network list manager object
INetworkListManager *mgr;
CoCreateInstance(CLSID_NetworkListManager, NULL, CLSCTX_ALL, IID_INetworkListManager, (LPVOID*)&mgr);
// get the enumerator for existing networks
IEnumNetworks *enn;
mgr->GetNetworks(NLM_ENUM_NETWORK_ALL, &enn);
for (;;) {
INetwork *net;
ULONG n = 0;
if (S_OK != enn->Next(1, &net, &n) || n < 1)
break;
// print the name of current network object
BSTR str;
net->GetName(&str); printf(" Name: %ws\n", str); SysFreeString(str);
// get the enumerator for network connections belonging to the current network
IEnumNetworkConnections *enc;
net->GetNetworkConnections(&enc);
INetworkConnection *nc;
for (;;) {
if (S_OK != enc->Next(1, &nc, &n))
break;
// explore the list of connections and print the adapter's GUID
nc->GetAdapterId(&g);
printf(" Adapter: {%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n",
g.Data1, g.Data2, g.Data3, g.Data4[0], g.Data4[1], g.Data4[2],
g.Data4[3], g.Data4[4], g.Data4[5], g.Data4[6], g.Data4[7]);
}
}
Код: Выделить всё
Name: Network
Name: Local Area Connection
Name: mygroup.net
Adapter: {e1b4e605-c6ee-4f03-b4c6-0d879a27669b}
Name: My Tunnel
Name: Unidentified network
Adapter: {12d9ae29-7863-414f-b195-e1230d8c697b}
Адаптер появляется только после того, как я установил соединение (в данном случае VPN). случай).
Как я могу получить адаптеры так же, как это делает PowerShell?
ПРИМЕЧАНИЕ: мне нужна возможность получить сетевой адаптер по имени сети. С помощью iphlpapi я могу получить другую информацию (например, InterfaceDescription), но не имя сети. Похоже, что «имя сети» не является частью «основной сети» Windows, а представляет собой своего рода уровень управления. Итак, единственное решение, которое я нашел сейчас, это CreateProcess("powershell.exe",...)... хм...
Подробнее здесь: https://stackoverflow.com/questions/789 ... g-c-c-apis