2012-07-03 2 views
0

Я хочу, чтобы получить индекс адаптера по его имени, после нескольких дней поисков я нашел GetAdapterIndex() функцию:GetAdapterIndex() возвращают неправильный индекс

#include <winsock2.h> 
#include <iphlpapi.h> 
#include <stdio.h> 
#include <iostream> 
#include <stdlib.h> 
#pragma comment(lib, "IPHLPAPI.lib") 

#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x)) 
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x)) 

int main() 
{ 
    DWORD res; 
    DWORD rs; 
    ULONG IfIndex; 
    LPWSTR AdapterName; 
    int i = 0; 
    res = GetAdapterIndex(L"AMD PCNET Family PCI Ethernet Adapter - Packet Scheduler Miniport", &IfIndex); 
    if(res == NO_ERROR) 
     printf("Adapter Index: %ld\n", IfIndex); 

    res = GetNumberOfInterfaces(&rs); 
    if(res == NO_ERROR) 
     printf("Number of Adapters: %ld\n", rs); 
return 0; 
} 

Первый: он не возвращает индекс для конкретного имя адаптера, которое я выбрал. Второй: Он возвращает, что у меня есть два адаптера, даже у меня есть только один.

+0

@arx Можете ли вы протестировать код в своей ОС, я использую Win XP SP3 с Visual Studio 2010. – SIFE

+0

Да, мой ноутбук Windows 7 имеет 33 сетевых адаптера! Только два являются физическими. Вы можете распечатать свои имена и описания с помощью функции «GetIfEntry» (индексы начинаются с 1). Все имена имеют форму '\ DEVICE \ TCPIP_ {846EE342-7039-11DE-9D20-806E6F6E6963}', которая объясняет, почему вы не находите свой адаптер, используя красивое имя. – arx

+0

@arx Правильно, я просто это понял. Пожалуйста, сделайте свой комментарий как ответ, чтобы я мог принять его как ответ. – SIFE

ответ

0

Вы можете распечатать имена и описания сетевых интерфейсов, используя GetIfEntry, с индексами от 1 до значения, возвращаемого GetNumberOfInterfaces. Все имена имеют форму \DEVICE\TCPIP_{846EE342-7039-11DE-9D20-806E6F6E6963}, которая объясняет, почему вы не находите свой интерфейс, используя красивое имя.