Программное изменение IP адреса под WinCE
От: Surge  
Дата: 25.01.05 16:02
Оценка:
Привет!

Господа, кто-нибудь может сказать, как под WinCE изменить статический IP-адрес?

В WinXP есть недокументированная функция SetAdapterIPAddress(), но под WinCE
ее нету, есть IP Helper API, в котором есть AddIPAddress(),но она добавляет
адрес, а нужно бы его заменить, чтобы и после выключения устройства он оставался
таким. Не могу понять, как это можно сделать. В реестр как-то писать? А как
потом "передернуть" системные настройки, чтобы новый адрес стал видимый?

Спасибо заранее!
Re: Программное изменение IP адреса под WinCE
От: butcher Россия http://bu7cher.blogspot.com
Дата: 26.01.05 07:06
Оценка:
Здравствуйте, Surge, Вы писали:

S>Господа, кто-нибудь может сказать, как под WinCE изменить статический IP-адрес?

Может можно через WMI, поищи Win32_NetworkAdapterConfiguration::EnableStatic..

Нет ничего невозможного..
Re[2]: Программное изменение IP адреса под WinCE
От: Surge  
Дата: 26.01.05 17:35
Оценка:
Здравствуйте, butcher, Вы писали:

B>Здравствуйте, Surge, Вы писали:


S>>Господа, кто-нибудь может сказать, как под WinCE изменить статический IP-адрес?

B>Может можно через WMI, поищи Win32_NetworkAdapterConfiguration::EnableStatic..

Спасибо большое!
А через какое-нибудь C++ API не получалось ни у кого?
Re[2]: Программное изменение IP адреса под WinCE
От: Michael Chelnokov Украина  
Дата: 26.01.05 18:08
Оценка:
Здравствуйте, butcher, Вы писали:

S>>Господа, кто-нибудь может сказать, как под WinCE изменить статический IP-адрес?

B>Может можно через WMI, поищи Win32_NetworkAdapterConfiguration::EnableStatic..

Дело в следующем... Где в Windows CE находится WMI?
Re[3]: Программное изменение IP адреса под WinCE
От: butcher Россия http://bu7cher.blogspot.com
Дата: 27.01.05 05:25
Оценка:
Здравствуйте, Michael Chelnokov, Вы писали:

MC>Дело в следующем... Где в Windows CE находится WMI?


ну тебе лучше знать..

Нет ничего невозможного..
Re: Программное изменение IP адреса под WinCE
От: mject Германия  
Дата: 18.03.05 10:45
Оценка:
Здравствуйте, Surge, Вы писали:

S>Господа, кто-нибудь может сказать, как под WinCE изменить статический IP-адрес?


Случайно наткнулся на этот пост... Прошло уже много времени, но если еще есть интерес, то могу показать как я сделал.
Re[2]: Программное изменение IP адреса под WinCE
От: butcher Россия http://bu7cher.blogspot.com
Дата: 18.03.05 10:57
Оценка:
Здравствуйте, mject, Вы писали:

M>Случайно наткнулся на этот пост... Прошло уже много времени, но если еще есть интерес, то могу показать как я сделал.


Покажи

Нет ничего невозможного..
Re[3]: Программное изменение IP адреса под WinCE
От: mject Германия  
Дата: 18.03.05 11:22
Оценка:
Пожалуйста:

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

TCHAR buf[32];

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

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

addr.S_un.S_addr = ipMask;
p = inet_ntoa( addr );
mbstowcs( buf, p, strlen( p ) + 1 );

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

addr.S_un.S_addr = ipGateway;
p = inet_ntoa( addr );
mbstowcs( buf, p, strlen( p ) + 1 );

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

RegFlushKey( hKey );
RegCloseKey( hKey );
}

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

// Send the device command.
DWORD xcount;
LPCTSTR szAdapterName = _T("PCI\\RTL81391");
int ret = DeviceIoControl( hNdis,
IOCTL_NDIS_REBIND_ADAPTER,
(PVOID)szAdapterName, ( _tcslen(szAdapterName) + 1 ) * sizeof(TCHAR),
NULL, 0, &xcount, NULL );

if( !ret )
WriteProgrammError( __FILE__, __LINE__, ERROR_CODE_STD );

CloseHandle( hNdis );
}
//-----------------------------------------------------------------------------
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...
Пока на собственное сообщение не было ответов, его можно удалить.