我在寫一個需要更改網絡連接名稱(例如「本地連接」)的VC++程序。如何使用WMI更改Win32_NetworkAdapter NetConnectionID屬性
Windows的IPHELPER提供API來獲取網絡連接,但它不提供寫入方法。 而且我知道我可以使用「netsh」來改變這個網絡連接的名稱,是的,在英文Windows中,這種方法工作正常,但在日文或中文的Windows中這種方法無法正常工作。
在閱讀了MSDN中的一些文檔後,我發現WMI Win32_NetworkAdapter類有一個屬性「NetConnectionID」。此屬性包含適配器的網絡連接名稱及其讀/寫屬性。
http://msdn.microsoft.com/en-us/library/windows/desktop/aa394216(v=vs.85).aspx
NetConnectionID
Data type: string
Access type: Read/write
所以,我寫了一個WMI代碼來改變這個屬性值。
int RasWmiAdapterSetInfo(void *pWmiAdapterCfg)
{
if(pWmiAdapterCfg)
{
int retVal = -1;
HRESULT hres;
VARIANT varWrite;
RAS_WMI_W32_ADAPTER_PTR *pRasWmiAdapterCfg = (RAS_WMI_W32_ADAPTER_PTR*)pWmiAdapterCfg;
VariantInit(&varWrite);
V_VT(&varWrite) = VT_BSTR;
V_BSTR(&varWrite) = SysAllocString(L"My New Connection 1");
hres = pRasWmiAdapterCfg->pclsObj->Put(L"NetConnectionID", 0, &varWrite, 0);
if(FAILED(hres))
{
printf("RasWmiAdapterSetInfo Failed HR=%08x\n", hres);
goto CLEARUP;
}
retVal = 0;
CLEARUP:
VariantClear(&varWrite);
return retVal;
}
return -1;
}
返回值hres正常,但該屬性值沒有改變。
IWbemLocator *pLoc;
IWbemServices *pSvc;
IEnumWbemClassObject *pEnumerator;
...
... (ignore some code to init pLoc, pSvc, pEnumerator)
...
IWbemClassObject *pclsObj;
IWbemClassObject *pClass;
pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
pSvc->GetObject(bstr_t(adapterClsName), 0, NULL, &pClass, NULL);
有人可以告訴我爲什麼pclsObj-> Put方法沒有生效嗎?
謝謝。