Re[4]: Программное изменение IP адреса под WinCE
От: Katraps  
Дата: 18.05.05 11:55
Оценка:
Здравствуйте, mject, Вы писали:

M>Пожалуйста:


M>//-----------------------------------------------------------------------------

M>void ChangeIPAddress( UINT ipAddr, UINT ipMask, UINT ipGateway )
M>{
M> HKEY hKey;
M> LONG lRes = RegOpenKeyEx( HKEY_LOCAL_MACHINE, _T("Comm\\PCI\\RTL81391\\Parms\\TcpIp"), 0, 0, &hKey );
M> if( lRes == ERROR_SUCCESS && hKey != NULL )
M> {
M> DWORD dw = 0;
M> RegSetValueEx( hKey, _T("EnableDHCP"), 0, REG_DWORD, (PBYTE)&dw, sizeof(DWORD)); //disable DHCP

M> TCHAR buf[32];


M> in_addr addr;

M> addr.S_un.S_addr = ipAddr;
M> char* p = inet_ntoa( addr );
M> mbstowcs( buf, p, strlen( p ) + 1 );

M> RegSetValueEx( hKey, _T("IpAddress"), 0, REG_MULTI_SZ, (PBYTE)buf, (wcslen( buf )+1) * sizeof(TCHAR) );


M> addr.S_un.S_addr = ipMask;

M> p = inet_ntoa( addr );
M> mbstowcs( buf, p, strlen( p ) + 1 );

M> RegSetValueEx( hKey, _T("Subnetmask"), 0, REG_MULTI_SZ, (PBYTE)buf, (wcslen( buf )+1) * sizeof(TCHAR) );


M> addr.S_un.S_addr = ipGateway;

M> p = inet_ntoa( addr );
M> mbstowcs( buf, p, strlen( p ) + 1 );

M> RegSetValueEx( hKey, _T("DefaultGateway"), 0, REG_MULTI_SZ, (PBYTE)buf, (wcslen( buf )+1) * sizeof(TCHAR) );


M> RegFlushKey( hKey );

M> RegCloseKey( hKey );
M> }

M> //Open NDIS driver

M> HANDLE hNdis;
M> hNdis = CreateFile( _T("NDS0:"), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL );
M> if( hNdis == INVALID_HANDLE_VALUE )
M> {
M> WriteProgrammError( __FILE__, __LINE__, ERROR_CODE_STD );
M> return;
M> }

M> // Send the device command.

M> DWORD xcount;
M> LPCTSTR szAdapterName = _T("PCI\\RTL81391");
M> int ret = DeviceIoControl( hNdis,
M> IOCTL_NDIS_REBIND_ADAPTER,
M> (PVOID)szAdapterName, ( _tcslen(szAdapterName) + 1 ) * sizeof(TCHAR),
M> NULL, 0, &xcount, NULL );

M> if( !ret )

M> WriteProgrammError( __FILE__, __LINE__, ERROR_CODE_STD );

M> CloseHandle( hNdis );

M>}
M>//-----------------------------------------------------------------------------


Возможно ли программно изменить IP address без rebind'a адаптера? у меня нет sdk.
Может где-то в реестре ставится флаг, чтобы измененный IP был виден и после перезагрузки системы. У меня WinNT, VC++ 6.0 стоит, поэтому стандартные функции изменения айпишника не могу использовать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.