Начало здесь
здесьАвтор: adontz
Дата: 03.01.04
?
Итак ситуация.
Я меняю параметры сетевухи (IP/Gateway/DNS/WINS) через WMI. Всё очень даже хорошо но!!!
Если сделать такое
Залогинится в домен. Сменить параметры сети моей програмой, сменить параметры обратно, то потом сеть не просмаривается, диски не мапятся (основная проблема)
Скорее всего баг программы потому что как утверждает клиент если сменить IP суда-сюда руками, то всё ОК. Воспроизвести ситауцию у себя не удалось. На 2000 (как у клиента), ХР, 2003 всё пашет как часики.
Ошибка выдаваемая при подключении (получаю делая WNetAddConnection2) номер 0x4cf (1231) "The network location cannot be reached. For information about network troubleshooting, see Windows Help."
Или объясните в чём баг (может оповещать кого-то надо об изменении параметров???) или расскажите почему так происходит (чтоб была отмазка )
Как исправить не знаю, а суть проблемы в том что очищается локальный нетбиосовский кэш, а повторной регистрации в сети не происходит...
О! Это интересно!
А что это такое и как бы его заставить пересчитаться? Дело в том, что в рабочей группе такого не происходит.
Как бы заставить перечитаться этот кеш?
можно попробовать перестартить следующие сервисы:
LmHosts Service: share TCP/IP NetBIOS Helper Service
NetBIOS Driver: fs NetBIOS Interface
NetBT Driver: kernel NetBios over Tcpip
Tcpip Driver: kernel TCP/IP Protocol Driver
Скорее всего, один из них
Насчет WMI не знаю, но если менять через SetAdapterIpAddress, то необходимо чтобы была запущена служба DHCP Client.
Здравствуйте, Gomes, Вы писали:
G>Насчет WMI не знаю, но если менять через SetAdapterIpAddress, то необходимо чтобы была запущена служба DHCP Client.
Это что за функция? SetAdapterIpAddress
... << RSDN@Home 1.1.0 stable >>
Здравствуйте, adontz, Вы писали:
A>Это что за функция? SetAdapterIpAddress
Недокументированная.
typedef DWORD (WINAPI *_SetAdapterIpAddress )( char *szAdapterGUID,
DWORD dwDHCP,
DWORD dwIP,
DWORD dwMask,
DWORD dwGateway );
HINSTANCE lib = (HINSTANCE) LoadLibrary( T("iphlpapi.dll") );
_SetAdapterIpAddress SetAdapterIpAddress = (_SetAdapterIpAddress) GetProcAddress( lib,"SetAdapterIpAddress" );
CRegistry Reg;
PWSTR pszGUID = NULL;
char szGUID[64] = {0};
DWORD dwSize = 0;
// Достаем GUID карты (отсюда мне удобней было брать)
Reg.Read( T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards\\1"),
T("ServiceName"),
(PVOID&) pszGUID,
&dwSize );
WideCharToMultiByte( CP_ACP, 0, pszGUID, -1, szGUID, sizeof( szGUID ), NULL, NULL );
SetAdapterIpAddress( szGUID,
0,
inet_addr("192.168.1.2"),
inet_addr("255.255.255.0"),
inet_addr("192.168.1.100") );