Prev Previous Post   Next Post Next

WMI EnableStatic not work in Vista

Posted: 08-30-2006, 03:02 PM
I have a simple function to switch network from DHCP to static, the function
works ok in XP, but not in Vista, the return code is 0 that scussed, but
nothing happend when I check by ipconfig, any help is welcome, I am using
VS.Net 2003 + latest SDK.
Thanks,
Eric

int SetStaticIP()
{
IWbemLocator *pLocator = NULL;
IWbemServices *pNamespace = 0;
IWbemClassObject *pClass = NULL;
IWbemClassObject *pMethod = NULL;
IWbemClassObject *pInInst = NULL;
IWbemClassObject *pOutInst = NULL;


// Strings needed later
BSTR className = SysAllocString(L"Win32_NetworkAdapterConfiguration ");
BSTR methodName = SysAllocString(L"EnableStatic");
BSTR namespacePath = SysAllocString(L"root\\cimv2");


// Create WbemLocator Instance
HRESULT hr;
hr = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER,
IID_IWbemLocator, (LPVOID *) &pLocator);


// Using the WbemLocator, connect to the namespace
hr = pLocator->ConnectServer(namespacePath, NULL, NULL, NULL, 0,
NULL, NULL, &pNamespace);


hr = CoSetProxyBlanket(
pNamespace, // Indicates the proxy to set
RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx
RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx
NULL, // Server principal name
RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx
RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
NULL, // client identity
EOAC_NONE // proxy capabilities
);

if (FAILED(hr))
{
pNamespace->Release();
pLocator->Release();
CoUninitialize();
return 0; // Program has failed.
}
// Get the class object
hr = pNamespace->GetObject(className, 0, NULL, &pClass, NULL);


// Get the method we want to use in this class
hr = pClass->GetMethod(methodName, 0, &pMethod, NULL);


// Spawn an instance of the method so we can set it up (parameters)
hr = pMethod->SpawnInstance(0, &pInInst);


// EnableStatic() expects to receive the args in an array
BSTR ArgNameIP = SysAllocString(L"IPAddress");
BSTR ArgNameSM = SysAllocString(L"SubnetMask");
BSTR IP = SysAllocString(L"172.21.0.1");
BSTR SM = SysAllocString(L"255.255.0.0");


SAFEARRAYBOUND sab[1];
sab[0].cElements = 1;
sab[0].lLbound = 0;


LONG i = 0; // index needed for SafeArrayPutElement()


// var1 is the array that holds one element which is IP
VARIANT var1;
var1.vt = VT_ARRAY | VT_BSTR;
var1.parray = SafeArrayCreate(VT_BSTR, 1, sab); // create the array
SafeArrayPutElement(var1.parray, &i, IP); // put IP in the array
at pos 0


// var2 is the array that holds one element which is SM
VARIANT var2;
var2.vt = VT_ARRAY | VT_BSTR;
var2.parray = SafeArrayCreate(VT_BSTR, 1, sab); // create the array
SafeArrayPutElement(var2.parray, &i, SM); // put SM in the array
at pos 0


// put the ArgName and the Argument itself into the Method instance we
have
hr = pInInst->Put(ArgNameIP, 0, &var1, 0);
VariantClear(&var1);
hr = pInInst->Put(ArgNameSM, 0, &var2, 0);
VariantClear(&var2);


// Enumerate the instances of the NetworkAdapter to get at the __PATH
property
// to the one and only network card we really want to modify
IEnumWbemClassObject* pEnum;
hr = pNamespace->CreateInstanceEnum(className,
WBEM_FLAG_RETURN_IMMEDIATELY | WBEM_FLAG_FORWARD_ONLY,
NULL, &pEnum);


// Get the instance
ULONG numRet;
BSTR PropName;
VARIANT desc;
VARIANT dhcp;
VARIANT ipEnabled;
VARIANT pathVar;
IWbemClassObject *pInstance;
while ( hr != WBEM_S_FALSE)
{
hr = pEnum->Next(WBEM_INFINITE, (ULONG)1, &pInstance, &numRet);

if(0 == numRet)
break;
// we know that the one with DHCP is the one we want
PropName = SysAllocString(L"DHCPEnabled");
pInstance->Get(PropName, 0, &dhcp, 0, 0);
if (dhcp.bVal)
{
SysFreeString(PropName);
PropName = SysAllocString(L"IPEnabled");
pInstance->Get(PropName, 0, &ipEnabled, 0, 0);
SysFreeString(PropName);
if(ipEnabled.bVal)
{
// Print out the description just for us to see
SysFreeString(PropName);
PropName = SysAllocString(L"Description");
pInstance->Get(PropName, 0, &desc, 0, 0);
SysFreeString(PropName);
break;
}
}
SysFreeString(PropName);
}


// now we have the instance of the actual network card we want to modify
// let's query it's PATH property so that we can call the method on it.
PropName = SysAllocString(L"__PATH");
pInstance->Get(PropName, 0, &pathVar, 0, 0);
BSTR InstancePath = pathVar.bstrVal;


// finally we get to call the actuall method we want (EnableStatic())
hr = pNamespace->ExecMethod(InstancePath, methodName, 0, NULL,
pInInst, &pOutInst, NULL);
long ret = 0;
if(hr != WBEM_S_NO_ERROR)
{
BSTR Text;
hr = pOutInst->GetObjectText(0, &Text);
// CString strText = Text;
// MessageBox(strText);
}
else
{
// Get the EnableStatic method return value

VARIANT ret_value;
BSTR strReturnValue = SysAllocString(L"ReturnValue");
hr = pOutInst->Get(strReturnValue, 0, &ret_value, 0, 0);
long ret = V_I4(&ret_value);
}



// We're done!
// Free up resources
SysFreeString(className);
SysFreeString(methodName);
SysFreeString(namespacePath);
SysFreeString(ArgNameIP);
SysFreeString(ArgNameSM);
SysFreeString(IP);
SysFreeString(SM);
SysFreeString(PropName);
SysFreeString(InstancePath);
pLocator->Release();
pClass->Release();
pMethod->Release();
pNamespace->Release();
pInInst->Release();
pOutInst->Release();
pEnum->Release();
pInstance->Release();
CoUninitialize();
return ret;
}
Reply With Quote

Responses to "WMI EnableStatic not work in Vista"

 
LinkBack Thread Tools Display Modes
 


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


Similar Threads
Thread Thread Starter Forum Replies Last Post
Please allow CTRL button to work with navigation in Vista!!! Josh Windows Vista File Management 2 10-10-2006 07:47 PM
My usb joystuck wont work with vista beta 2 eggyman Windows Vista Games 2 08-24-2006 07:22 PM
Wireless cards don't work with WEP on VISTA Mark S-123 Windows Vista Networking & Sharing 3 06-22-2006 05:41 PM
Network does not work on my Vista flopol Windows Vista Networking & Sharing 0 06-21-2006 03:22 PM
What programs don't work in Vista David Sherman Windows Vista Install & Setup 3 04-22-2006 07:45 PM