ネットワーク接続名(例:「ローカル接続」)を変更する必要がある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;
}
戻り値は正常ですが、このプロパティ値は変更されませんでした。
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メソッドが有効にならなかった理由は誰にでも分かりますか?
ありがとうございました。