vc 怎样设置IP 的状态

#include "stdafx.h"
#define _WIN32_DCOM
#include <Wbemidl.h>
#pragma comment(lib,"Wbemuuid.lib")
#include <atlbase.h>
//#include "wbemcli.h"
#include "objbase.h"
#include <windows.h>
#include <comutil.h>
#pragma comment(lib, "comsupp.lib")
void CreateOneElementBstrArray(VARIANT* v, LPCWSTR s) 



SAFEARRAYBOUND bound[1]; 
SAFEARRAY* array; 
bound[0].lLbound = 0; 
bound[0].cElements = 1; 
array = SafeArrayCreate(VT_BSTR, 1, bound); 
long index = 0; 
BSTR bstr = SysAllocString(s); 
SafeArrayPutElement(array, &index, bstr); 
SysFreeString(bstr); 
VariantInit(v); 
v->vt = VT_BSTR | VT_ARRAY; 
v->parray = array; 

HRESULT __fastcall UnicodeToAnsi(LPCOLESTR pszW, LPSTR* ppszA)
{

ULONG cbAnsi, cCharacters;
DWORD dwError;

// If input is null then just return the same.
if (pszW == NULL)
{
*ppszA = NULL;
return NOERROR;
}

cCharacters = wcslen(pszW)+1;
// Determine number of bytes to be allocated for ANSI string. An
// ANSI string can have at most 2 bytes per character (for Double
// Byte Character Strings.)
cbAnsi = cCharacters*2;

// Use of the OLE allocator is not required because the resultant
// ANSI  string will never be passed to another COM component. You
// can use your own allocator.
*ppszA = (LPSTR) CoTaskMemAlloc(cbAnsi);
if (NULL == *ppszA)
return E_OUTOFMEMORY;

// Convert to ANSI.
if (0 == WideCharToMultiByte(CP_ACP, 0, pszW, cCharacters, *ppszA,
cbAnsi, NULL, NULL))
{
dwError = GetLastError();
CoTaskMemFree(*ppszA);
*ppszA = NULL;
return HRESULT_FROM_WIN32(dwError);
}
return NOERROR;



void PrintWMIError(HRESULT hr)
{
     IWbemStatusCodeText * pStatus = NULL;
     HRESULT hres = CoCreateInstance(CLSID_WbemStatusCodeText, 0,
         CLSCTX_INPROC_SERVER,IID_IWbemStatusCodeText, (LPVOID *) &pStatus);
     if(S_OK == hres)
     {
BSTR bstrError;
hres = pStatus->GetErrorCodeText(hr, 0, 0, &bstrError);
if(S_OK != hres)
    bstrError = SysAllocString(L"Get last error failed");
LPSTR pszStatusTextA;
UnicodeToAnsi(bstrError, &pszStatusTextA);
printf("%s/n",pszStatusTextA);
CoTaskMemFree(pszStatusTextA);
pStatus->Release();
SysFreeString(bstrError);
}

HRESULT ConfigNet()
{

IWbemLocator *pLocator=NULL; 
IWbemServices *pNamespace=NULL; 
IWbemClassObject *pClass=NULL; 
IWbemClassObject *pInputParamClass=NULL; 
IWbemClassObject *pInputParamInstance=NULL; 
IWbemClassObject * pOutInst = NULL;
BSTR InstancePath = SysAllocString
            (L"Win32_NetworkAdapterConfiguration=2");
HRESULT hr; 
BSTR Path = SysAllocString(L"MICROSOFT//root//cimv2"); 
BSTR ClassPath = SysAllocString
                (L"Win32_NetworkAdapterConfiguration"); 
BSTR MethodName = SysAllocString(L"EnableStatic"); 
LPCWSTR Arg1Name = L"IPAddress"; 
VARIANT var1; 
LPCWSTR Arg2Name = L"SubnetMask"; 
VARIANT var2; 
__try
{
     CreateOneElementBstrArray(&var1, L"10.0.0.101"); 
     CreateOneElementBstrArray(&var2, L"255.255.255.0"); 

              CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, 
IID_IWbemLocator, (void**)&pLocator); 
hr = pLocator->ConnectServer(Path,NULL, NULL, NULL, 0, NULL, NULL, 
&pNamespace); 
hr = CoSetProxyBlanket( pNamespace, 
RPC_C_AUTHN_WINNT, 
RPC_C_AUTHZ_NONE, 
NULL, 
RPC_C_AUTHN_LEVEL_CALL,
RPC_C_IMP_LEVEL_IMPERSONATE, 
NULL,
EOAC_NONE);

if(!SUCCEEDED(hr)){PrintWMIError(hr);return hr;}
if(SUCCEEDED(hr))
hr = pNamespace->GetObject(ClassPath, 0, NULL, &pClass, NULL); 
if(!SUCCEEDED(hr)){PrintWMIError(hr);return hr;} 
if(SUCCEEDED(hr))
hr = pClass->GetMethod(MethodName, 0, &pInputParamClass, NULL); 
if(!SUCCEEDED(hr)){PrintWMIError(hr);return hr;}
if(SUCCEEDED(hr))
hr = pInputParamClass->SpawnInstance(0, &pInputParamInstance); 
if(!SUCCEEDED(hr)){PrintWMIError(hr);return hr;} 
if(SUCCEEDED(hr))
hr = pInputParamInstance->Put(Arg1Name, 0, &var1, 0); 
if(!SU

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值