C++ WMI 修改PC ip地址,子網掩碼,網關

C++ WMI 修改PC ip地址,子網掩碼,網關

網上介紹此中操作方式,也有不少,不過相對VB.net和C#就比較少,說的也不到位;

(爲什麼採用這種方式,因爲採用修改註冊表,通知網絡適配器(DhcpNotifyConfigChange)的方式,不支持Vista,和Windows7操作系統,爲此才採用這種方式);

講解一下基本流程:

CoInitializeEx
CoInitializeSecurity
CoCreateInstance
ConnectServer
GetMethod
SpawnInstance
SafeArrayCreate
SafeArrayPutElement
pInParams->Put
ExecMethod

以上是基本流程;

對於本地PC有多個網卡的,如何解決啊;

解決方式:

1.通過GetAdaptersInfo獲取,IP_ADAPTER_INFO結構體中AdaterName;(參考:不重起Windows直接更改IP地址
http://www.vckbase.com/document/viewdoc/?id=851

2.在通過Win32_NetworkAdapterConfiguration 中的SettingID等於 AdaterName查詢出index;

3.通過index,保存(Put)到相應的值;

 注意的問題:

class Win32_NetworkAdapterConfiguration : CIM_Setting
{
  boolean ArpAlwaysSourceRoute  ;
  boolean ArpUseEtherSNAP  ;
  string Caption  ;
  string DatabasePath  ;
  boolean DeadGWDetectEnabled  ;
  string DefaultIPGateway[]  ;
  uint8 DefaultTOS  ;
  uint8 DefaultTTL  ;
  string Description  ;
  boolean DHCPEnabled  ;
  datetime DHCPLeaseExpires  ;
  datetime DHCPLeaseObtained  ;
  string DHCPServer  ;
  string DNSDomain  ;
  string DNSDomainSuffixSearchOrder[]  ;
  boolean DNSEnabledForWINSResolution  ;
  string DNSHostName  ;
  string DNSServerSearchOrder[]  ;
  boolean DomainDNSRegistrationEnabled  ;
  uint32 ForwardBufferMemory  ;
  boolean FullDNSRegistrationEnabled  ;
  uint16 GatewayCostMetric[]  ;
  uint8 IGMPLevel  ;
  uint32 Index  ;
  string IPAddress[]  ;
  uint32 IPConnectionMetric  ;
  boolean IPEnabled  ;
  boolean IPFilterSecurityEnabled  ;
  boolean IPPortSecurityEnabled  ;
  string IPSecPermitIPProtocols[]  ;
  string IPSecPermitTCPPorts[]  ;
  string IPSecPermitUDPPorts[]  ;
  string IPSubnet[]  ;
  boolean IPUseZeroBroadcast  ;
  string IPXAddress  ;
  boolean IPXEnabled  ;
  uint32 IPXFrameType[]  ;
  uint32 IPXMediaType  ;
  string IPXNetworkNumber[]  ;
  string IPXVirtualNetNumber  ;
  uint32 KeepAliveInterval  ;
  uint32 KeepAliveTime  ;
  string MACAddress  ;
  uint32 MTU  ;
  uint32 NumForwardPackets  ;
  boolean PMTUBHDetectEnabled  ;
  boolean PMTUDiscoveryEnabled  ;
  string ServiceName  ;
  string SettingID  ;
  uint32 TcpipNetbiosOptions  ;
  uint32 TcpMaxConnectRetransmissions  ;
  uint32 TcpMaxDataRetransmissions  ;
  uint32 TcpNumConnections  ;
  boolean TcpUseRFC1122UrgentPointer  ;
  uint16 TcpWindowSize  ;
  boolean WINSEnableLMHostsLookup  ;
  string WINSHostLookupFile  ;
  string WINSPrimaryServer  ;
  string WINSScopeID  ;
  string WINSSecondaryServer  ;
};
說明:

Methods:

EnableDHCP

EnableStatic(修改IP地址和子網掩碼)對應Win32_NetworkAdapterConfiguration 中的IPAddress和SubnetMask;

上面兩個要單獨使用,用ExecMethod調用了EnableDHCP就不要調用EnableStatic,在執行過程中容易使PC產生兩個IP地址(Windows7);

SetGateways 設置網關的方法:對應Win32_NetworkAdapterConfiguration 中的DefaultIPGateway;

用此種方法(WMI)就不要用,修改註冊表的方式來修改IP地址其它參數了。

 

發佈了84 篇原創文章 · 獲贊 14 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章