Здравствуйте, Romul, Вы писали:
R>Здравствуйте, вфкл, Вы писали:
В>>имя адаптера узнаю по GetAdaptersInfo. Получаю что-то вроде В>>{F0A48EF2-3D17-4B1C-A6F1-2247824DF353} В>>Как сопоставить это имя с именем активного удаленного соединения? В>>Например, в ipconfig выдается в виде В>>Adapter <имя удаленного соединения> В>>Не подскажите?
R>Кидаю кусок кода, который юзаю сам для получения информации об адаптерах. Работает по идее только на Вин2К. Если ты пользуешь Юникод проект, то R>соответственно все мои преобразования можешь выкинуть R>//////////CUT////////////////// R> char* HostName; R> unsigned long Size=1000;
R> HostName = new char[Size]; R> if(!GetComputerName(HostName, &Size)) R> { R> m_Error->PutError(0, __FILE__, __LINE__, R> "Computer name is too long", 1); R> goto ret; R> }
R> unsigned short HostNameUnicode[1000];
R> if(!MultiByteToWideChar(CP_ACP, 0, HostName, -1, HostNameUnicode, 1000)) R> { R> m_Error->PutError(0, __FILE__, __LINE__, R> "Error converting to Unicode", 1); R> goto ret; R> }
R> HANDLE hMprConfig; R> if(MprConfigServerConnect(HostNameUnicode, &hMprConfig)!=NO_ERROR) R> { R> int ret=GetLastError(); R> m_Error->PutError(0, __FILE__, __LINE__, R> "Error connecting to the router", 1); R> goto ret; R> }
R> while(AdrInfo!=NULL) R> { R> char Buffer[1000]; R> unsigned short AdapterName[1000]; R> unsigned short FriendlyBuffer[1000];
R> if(!MultiByteToWideChar(CP_ACP, 0, AdrInfo->AdapterName, R> -1, AdapterName, 1000)) R> { R> m_Error->PutError(0, __FILE__, __LINE__, R> "Error converting to Unicode", 1); R> AdrInfo=AdrInfo->Next; R> continue; R> } R>///Собственно функция ниже и выполняет преобразование GUID адаптера в читаемую форму (но в Юникоде) R> if(MprConfigGetFriendlyName(hMprConfig, AdapterName, FriendlyBuffer, R> 1000)!=NO_ERROR) R> { R> m_Error->PutError(0, __FILE__, __LINE__, "Error converting adapter "\ R> "name to a readable form", 1); R>// goto ret; R> AdrInfo=AdrInfo->Next; R> continue; R> } R>//После вызоыва этой функции Buffer содержит то что тебе нужно R> if(!WideCharToMultiByte(CP_ACP, 0, FriendlyBuffer, R> -1, Buffer, 1000, NULL, NULL)) R> { R> m_Error->PutError(0, __FILE__, __LINE__, R> "Error converting from Unicode", 1); R> AdrInfo=AdrInfo->Next; R> continue; R> }
R>///Этот кусок не нужен, я запаковываю все в один буфер здесь R> int Len=strlen(Buffer)+1; R> memcpy(Pointer, &Len, sizeof(int)); R> Pointer+=sizeof(int); R> memcpy(Pointer, Buffer, Len); R> Pointer+=Len;
R> Len=strlen(AdrInfo->IpAddressList.IpAddress.String)+1; R> memcpy(Pointer, &Len, sizeof(int)); R> Pointer+=sizeof(int); R> memcpy(Pointer, AdrInfo->IpAddressList.IpAddress.String, Len); R> Pointer+=Len; R>///////////////////////////////////////////////////////////////////////////
R> AdrInfo=AdrInfo->Next; R> }
К сожалению, это не работает для модемов.У меня подключено 2 модема, по ipconfig видны их имена а системе и IP адреса.
Однако, как определить, какой IP адрес относится к какому модему непонятно.
Все функции типа GetAdapter...() дают для обоих модемов имя WAN PPP/SLIP.
Может кто знает?