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