iphlpapi动态库中的隐藏的GetAdaptersInfo函数和SetAdapterIpAddress函数对主机的ip、mask和gateway进行设置// SetAdapterInfo.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <windows.h> #include <Iptypes.h> #pragma comment(lib,"Ws2_32.lib"); typedef DWORD (WINAPI * pfnGetAdaptersInfo)(PIP_ADAPTER_INFO pAdapterInfo,PULONG pOutBufLen); typedef DWORD (WINAPI * pfnSetAdapterIpAddress)(char * pszAdapGUID,DWORD dwDHCP,DWORD dwIp,DWORD dwMask,DWORD dwGateway); int _tmain(int argc, _TCHAR* argv[]) { HINSTANCE hInstance; pfnSetAdapterIpAddress SetAdapterIpAddress; pfnGetAdaptersInfo GetAdaptersInfo; IP_ADAPTER_INFO ipAdapterInfo; ULONG ulAdapterInfoSize = sizeof(IP_ADAPTER_INFO); if((hInstance=LoadLibrary(_T("iphlpapi")))==NULL) { printf("dll load failed.\n"); return -1; } if((GetAdaptersInfo = (pfnGetAdaptersInfo)GetProcAddress(hInstance, "GetAdaptersInfo")) == NULL) { printf("get dll procedure failed.\n"); FreeLibrary(hInstance); return -2; } if((GetAdaptersInfo)(&ipAdapterInfo,&ulAdapterInfoSize)!=NO_ERROR ) { printf("get network adapter information failed.\n"); return -3; } if((SetAdapterIpAddress = (pfnSetAdapterIpAddress)GetProcAddress(hInstance, "SetAdapterIpAddress")) == NULL) { printf("get dll procedure failed.\n"); FreeLibrary(hInstance); return -4; } if((SetAdapterIpAddress)(ipAdapterInfo.AdapterName,1,0,0,0)==ERROR_SUCCESS) { printf("Set Ip config to dhcp succeeded.\n"); } else { printf("Set Ip config to dhcp failed.\n"); } printf("Do you want to config static ip address?"); char flag; scanf("%c",&flag); if(flag=='y' || flag=='Y') { if((SetAdapterIpAddress)(ipAdapterInfo.AdapterName,0,inet_addr("192.168.0.123"),inet_addr("255.255.255.0"),inet_addr("192.168.0.1"))==ERROR_SUCCESS) { printf("Set Ip config to static ip address succeeded.\n"); } else { printf("Set Ip config to static ip address failed.\n"); } } FreeLibrary(hInstance); return 0; }
|