|
Win32_NetWorkAdapterConfiguration
아이피 어드레스를 변경해주는거거든요
혹 이거말고라도 방법이 있나요?
혹시 아시는 분 말씀좀 해주세요..
소스를 올리고 싶은데 제가 짠 소스도 아니고 공개용이 아니라서..
혹시 아시는 분이 계시다면 메일로 부탁드립니다..꾸벅...
부분적으로는요...
bool __fastcall TFrmMain::SetNAC( IWbemServices * pIWbemServices )
{
IWbemClassObject * pClass = NULL;
IWbemClassObject * pOutInst = NULL;
IWbemClassObject * pInClass = NULL;
IWbemClassObject * pInInst = NULL;
BSTR path = SysAllocString(L"sample");
BSTR ClassPath = SysAllocString(L"Win32_NetWorkAdapterConfiguration");
BSTR InstancePath = SysAllocString(L"Win32_NetWorkAdapterConfiguration.Index='1'");
BSTR MethodName = SysAllocString(L"EnableStatic");
BSTR ArgName1 = SysAllocString(L"IPAddress");
BSTR ArgName2 = SysAllocString(L"SubNetMask");
EnableWmi = CreateWMI();
if (EnableWmi)
{
LogMsg("Connect WMI services.");
pIWbemServicesCIMV2 = OpenWMICIMV2();
if (pIWbemServicesCIMV2 == NULL)
{
LogMsg("(X) Failed to connect with CIMV2.");
}
}
else
{
LogMsg("(X) WMI services not present or unavailable!");
pIWbemServicesCIMV2 = NULL;
}
IEnumWbemClassObject* pEnum = GetEnumNAC();
if (pEnum == NULL)
{
LogMsg( "Can't get enumerate instances!" );
return false;
}
IWbemClassObject *pInst = NULL;
ULONG uReturned;
VARIANT vVal;
VariantInit(&vVal);
while (pEnum->Next(INFINITE, 1, &pInst, &uReturned) == WBEM_NO_ERROR)
{
// Get the Instance Name string
if ((pInst->Get(L"IPEnabled", 0L, &vVal, NULL, NULL)) == WBEM_NO_ERROR)
{
if (vVal.boolVal == false)
{
continue;
}
VariantClear(&vVal);
}
}
pEnum->Release();
BSTR Class;
BSTR Class1;
HRESULT hr;
// Alloc class name string
Class = SysAllocString(L"Win32_NetworkAdapterConfiguration");
if (!Class) // Out of memory
{
return false;
}
hr = pIWbemServicesCIMV2->GetObject(ClassPath, 0L, NULL, &pInst, NULL);
check_getobj(hr);
SysFreeString(Class);
Class = NULL;
if ( hr != WBEM_NO_ERROR )
{
return false;
}
/////////////////////////////////////////////////////////////////
LogMsg("Connected to WMI");
// Set the proxy so that impersonation of the client occurs.
hr = CoSetProxyBlanket(pIWbemServicesCIMV2,
RPC_C_AUTHN_WINNT,
RPC_C_AUTHZ_NONE,
NULL,
RPC_C_AUTHN_LEVEL_CALL,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE
);
check(hr);
// Get the class object
LogMsg("");
LogMsg(" Get Class object Test ...");
hr = pIWbemServicesCIMV2->GetObject(ClassPath, 0, NULL, &pClass, NULL);
check_getobj(hr);
if(hr != WBEM_S_NO_ERROR)
{
LogMsg("Error");
return false;
}
// Get the input argument and set the property
LogMsg("");
LogMsg(" Get Method Test ...");
hr = pClass->GetMethod(MethodName, 0, &pInClass, NULL);
check_getmethod(hr);
LogMsg(hr);
if(hr != WBEM_S_NO_ERROR)
{
LogMsg("Error");
return false;
}
hr = pInClass->SpawnInstance(0, &pInInst);
if(hr != WBEM_S_NO_ERROR)
{
LogMsg("Error");
return false;
}
LogMsg("");
LogMsg(" Put Test ...");
BSTR ip;
BSTR mask;
ip = SysAllocString(L"192.168.255.252");
mask = SysAllocString(L"255.255.255.0");
long index[]={0};
SAFEARRAY *ip_list;
ip_list = SafeArrayCreateVector(VT_BSTR,0,1);
SafeArrayPutElement(ip_list,index,ip);
SAFEARRAY *mask_list;
mask_list = SafeArrayCreateVector(VT_BSTR,0,1);
SafeArrayPutElement(mask_list,index,mask);
VARIANT arg1;
arg1.vt = VT_ARRAY|VT_BSTR;
arg1.parray = ip_list;
// hr = pInInst->Put(ArgName1, 0, &arg1, 0);
hr=pInInst->Put(L"IPAddress",0L,&arg1,NULL);
if(hr != WBEM_S_NO_ERROR)
{
LogMsg("(X) Put IP failed ");
return false;
}
else
{
LogMsg("(O) Put IP succeeded");
}
/* VARIANT arg2;
arg2.vt = VT_ARRAY|VT_BSTR;
arg2.parray = mask_list;
hr = pInInst->Put(ArgName2, 0, &arg2, 0);
check2(hr);
if(hr != WBEM_S_NO_ERROR)
{
LogMsg("(X) Put Subnet failed ");
return false;
}
else
{
LogMsg("(O) Put Subnet succeeded");
}
*/
// Call the method
LogMsg("");
LogMsg(" ExecMethod Test ...");
hr = pIWbemServicesCIMV2->ExecMethod(InstancePath, MethodName, 0, NULL, pInInst,
&pOutInst, NULL);
check(hr);
if(hr != WBEM_S_NO_ERROR){
LogMsg("(X) ExecMethod failed ");
return false;
}
else
{
LogMsg("(O) ExecMethod succeeded");
}
if(hr!=0)
{
LogMsg("(X) EnableStatic failed with return code ");
LogMsg("");
return false;
}
else
{
LogMsg("(O) EnableStatic succeeded");
// Free up resources
SysFreeString(ip);
SysFreeString(mask);
SafeArrayDestroy(ip_list);
SafeArrayDestroy(mask_list);
VariantClear(&arg1);
// VariantClear(&arg2);
SysFreeString(path);
SysFreeString(ClassPath);
SysFreeString(InstancePath);
SysFreeString(MethodName);
SysFreeString(ArgName1);
SysFreeString(ArgName2);
// pClass->Release();
// pInInst->Release();
// pInClass->Release();
// pOutInst->Release();
// pIWbemServicesCIMV2->Release();
CoUninitialize();
return true;
}
}
이부분이 세팅을 해주는 부분인데...
읽어오는건 되거든요
근데 세팅하면서 에러는 안나는데 결과적으론 세팅이 안되요...
결과는
Connect WMI services.
==============================================================================
-The call succeeded.
------------------------------------------------------------------------------
MACAddress = 00:0B:DB:4C:D3:9D
Description = Intel(R) PRO/1000 MT Network Connection - パケット スケジューラ ミニポート
IPAddress = 10.30.24.53
IPSubnet = 255.255.224.0
DefaultIPGateway = 10.30.1.1
DHCPEnabled = FALSE
DNSHostName = c-st-kong
WINSPrimaryServer = 10.30.1.5
==============================================================================
Connect WMI services.
-The call succeeded.
The call succeeded.
Connected to WMI
(O) The call succeeded.
Get Class object Test ...
The call succeeded.
Get Method Test ...
(O) The requested in and out parameter objects were returned.
0
Put Test ...
(O) Put IP succeeded
ExecMethod Test ...
(O) The call succeeded.
(O) ExecMethod succeeded
(O) EnableStatic succeeded
(O) Set succeeded.
이렇게 나오거든요...
Get Method부터인지...잘못된거 같은데..
어디를 찾아봐도 읎네요
아니 엔에스디엔을 보고도 잘 모르겠네요...
부탁드립니다.
|