ip地址为自动获取时,IPAddress,SubnetMask,DefaultGateway 都为空.
DhcpIPAddress
Dhcpxxxxxxx不为空.
ip地址为手动设置时,IPAddress,SubnetMask,DefaultGateway 为对应设置的值,DhcpIPAddress没有这样的键值.
2.关于设置DSN服务器的问题:
自动获取和手动设置DSN服务器地址的选项 和注册表里面的NameServer相关联
NameServer为空时,代表是自动获取DSN服务器
NameServer为不为空时,代表就是备选的DSN服务器.
修改对应的ip后,必须要重启网卡才能使ip生效,因为发送通知window的函数无效,只能通过控制网卡来生效IP地址
BOOL CMyDlg::ChangeAdapterStatus(LPCTSTR AdapterDeviceDesc, int Flag)//Flag =DICS_DISABLE-->禁用网络
{ //Flag =DICS_ENABLE--->恢复网络
if (INVALID_HANDLE_VALUE == (hDevInfo =
SetupDiGetClassDevs(NULL,NULL,0,
DIGCF_PRESENT|DIGCF_ALLCLASSES)))
{
printf("GetClassDevs");
}
DWORD i;
SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};
unsigned char *guid[4]={0};
char DeviceName[200]={0};
wchar_t str[100]={0};
int size=100;
DWORD DataT;
unsigned char *buffer=NULL;
DWORD sz=0;
for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData);i++)
{
//DeviceInfoData.ClassGuid="{4D36E972-E325-11CE-BFC1-08002BE10318}";
StringFromGUID2(DeviceInfoData.ClassGuid,str,size);
char temp[100]={0};
char Rtl[]="{4D36E972-E325-11CE-BFC1-08002BE10318}";
for(int j=0;str[j]!='\0';j++)
{
temp[j]=(char)str[j];
}
if(strcmp(temp,Rtl)==0)
{
LPTSTR buffer=NULL ;
DWORD buffersize=0 ;
while(!SetupDiGetDeviceRegistryProperty(hDevInfo,&DeviceInfoData,\
SPDRP_DEVICEDESC,&DataT, (PBYTE)buffer,buffersize,&buffersize))
{
if(GetLastError()==ERROR_INVALID_DATA)
{
break ;
}
else if(GetLastError()==ERROR_INSUFFICIENT_BUFFER)
{
if(buffer)
LocalFree(buffer);
buffer=(LPTSTR)LocalAlloc(LPTR,buffersize);
}
else
{
SetupDiDestroyDeviceInfoList(hDevInfo);
return FALSE ;
}
}
if(GetLastError()==ERROR_INVALID_DATA)
continue ;
if(strcmp(buffer,AdapterDeviceDesc)==0)
{
if (StateChange(Flag,i,hDevInfo))
{
break;
}
else
{
CString temp="对";
temp+=AdapterDeviceDesc;
temp+="的操作失败!";
AfxMessageBox(temp);
return FALSE;
}
}
}
}
return TRUE;
}