2266|0

50

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于用程序设置IP和重启网卡的问题 [复制链接]

下面是用程序设置IP的函数,对红色的代码有个疑问,就像红色代码那样,如果想重启网卡,先 CloseHandle(hFile); 再 hFile = CreateFile(...) 行不行?有没有问题?看网上不是这么写的,他们用另一个文件句柄。


//
// SetIP
//
VOID SetIP(TCHAR*  ipaddress, TCHAR*  subnetmask, TCHAR*  gateway)
{
        TCHAR   adName[256];
        DWORD   bytes;
        DWORD   len;
        HKEY    hkey;
        TCHAR   keyName[256];
        HANDLE  hFile;
    DWORD   value;   

        do
        {
               
                //获得网卡的设备名
                hFile = CreateFile(_T("NDS0:"), 0, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (HANDLE) INVALID_HANDLE_VALUE);
                if( hFile == INVALID_HANDLE_VALUE )
                {
                        MessageBox(g_hWndMain, _T("FAIL to open Adapter Device!"), _T("Error"), MB_OK);
                        break;
                }
               
                MessageBox(g_hWndMain, _T("OK to open device!"), _T("Ok"), MB_OK);
               
                // Get list of adapter names
                if (!DeviceIoControl(hFile, IOCTL_NDIS_GET_ADAPTER_NAMES, NULL, 0, adName, MAX_PATH, &bytes, NULL))
                {
                        MessageBox(g_hWndMain, _T("FAIL to get Adapter Name!"), _T("Error"), MB_OK);
                        break;
                }
               
                MessageBox(g_hWndMain, _T("OK to get Adapter Name!"), adName, MB_OK);
               
                len = wcslen(adName);
                adName[len] = 0;
                adName[len+1] = 0;
                swprintf(keyName, _T("Comm\\%s\\Parms\\TCPIP"), adName);
               
                //打开注册表对网卡IP信息对应子健进行修改
                if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE,keyName,0,KEY_WRITE,&hkey))   
                {
                        MessageBox(g_hWndMain, TEXT("FAIL to open regestry!"), _T("Error"), MB_OK);   
                        break;
                }
               
                MessageBox(g_hWndMain, TEXT("OK to open regestry!"), _T("Ok"), MB_OK);
               
               
                value   =   0;
               
                // set DHCP   
                if(ERROR_SUCCESS != RegSetValueEx(hkey,TEXT("EnableDHCP"),0,REG_DWORD,(const unsigned char*)&value,sizeof(DWORD)))   
                        MessageBox(g_hWndMain, TEXT("FAIL to set DHCP!"), _T("Error"), MB_OK);   // 关闭自动获得IP错误
               
                // set ip address   
                if(ERROR_SUCCESS != RegSetValueEx(hkey,TEXT("IpAddress"),0,REG_MULTI_SZ,(const unsigned char*)ipaddress, wcslen(ipaddress)*sizeof(TCHAR)+sizeof(TCHAR)))   
                        MessageBox(g_hWndMain, TEXT("FAIL to set IP Address"), _T("Error"), MB_OK); // 设置IP错误
               
                // set subnet mask  
                if(ERROR_SUCCESS != RegSetValueEx(hkey,TEXT("SubnetMask"),0,REG_MULTI_SZ,(const unsigned char*)subnetmask, wcslen(subnetmask)*sizeof(TCHAR)+sizeof(TCHAR)))   
                        MessageBox(g_hWndMain, TEXT("FAIL to set Subnet Mask!"), _T("Error"), MB_OK);   // 设置子网掩码错误
               
                // set gateway
                if(ERROR_SUCCESS != RegSetValueEx(hkey,TEXT("DefaultGateway"),0,REG_MULTI_SZ,(const unsigned char*)gateway, wcslen(gateway)*sizeof(TCHAR)+sizeof(TCHAR)))   
                        MessageBox(g_hWndMain, TEXT("FAIL to set Gateway!"), _T("Error"), MB_OK); // 设置网关错误
               
                RegFlushKey(hkey);
                RegCloseKey(hkey);
                CloseHandle(hFile);
               
                // 重启网卡,不用机器热启动
                hFile = CreateFile(_T("NDS0:"), 0, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (HANDLE) INVALID_HANDLE_VALUE);

                if( hFile == INVALID_HANDLE_VALUE )
                {
                        MessageBox(g_hWndMain, _T("FAIL to open Adapter Device!"), _T("Error"), MB_OK); // 重启网络驱动时打开设备错误
                        break;
                }
               
                // send the device command.
                if (!DeviceIoControl(hFile, IOCTL_NDIS_REBIND_ADAPTER, adName, wcslen(adName)*sizeof(TCHAR), NULL, 0, NULL, NULL ) )
                {
                        MessageBox(g_hWndMain, _T("FAIL to restart Adapter Driver"), _T("Error"), MB_OK); // 重启网络驱动错误
                        break;
                }
               
        }while(0);


        CloseHandle(hFile); //[]
        return;
}
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表