WMIインスタンスの削除のためにC#とVBSでいくつかのサンプルが見つかりましたが、これはC++で実装する必要があります。C++でWMIインスタンスを削除する
私のサンプルコード:
CoInitialize(NULL);
HRESULT hRes;
//Obtain the initial locator to WMI
CComPtr<IWbemLocator> pLoc = NULL;
hRes = CoCreateInstance(CLSID_WbemLocator, NULL, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*) &pLoc);
if(FAILED(hRes))
return 1;
//Connect to WMI through the IWbemLocator::ConnectServer method
CComPtr<IWbemServices> pSvc = NULL;
//Connect to the root namespace with the current user and obtain pointer pSvc to make IWbemServices calls.
hRes = pLoc->ConnectServer(L"ROOT\\SUBSCRIPTION", NULL, NULL, 0, NULL, 0, 0, &pSvc);
if(FAILED(hRes))
return 1;
hRes = pSvc->DeleteInstance(
L"CommandLineEventConsumer.Name='{709782F3-E860-488E-BD8A-89FBC8C1495C}'",
WBEM_FLAG_RETURN_IMMEDIATELY, NULL, NULL);
return 0;
私はhereとhereを見つけたことによると、私のコードは動作するはずです。 (コールへのパラメータの一つが正しくない)私は確かに{709782F3-E860-488E-BD8A-89FBC8C1495C}
という名前CommandLineEventConsumer
を持っており、私のコードはIWbemServices::DeleteInstance
に失敗し、エラーコード0x80041008
。
誰かが私のコードで間違いを発見したら、私は感謝します。それを行うにはいくつかの特権が必要でしょうか?
'BSTR'でも' CComBSTR'でも動作しません。また、 'BSTR'は' OLECHAR * '、' OLECHAR'を 'WCHAR'、' WCHAR'を 'wchar_t'として型定義されています。基本的に 'BSTR'と' wchar_t * 'は同じです。 – ST3
@ ST3: 'BSTR'と' wchar_t * 'は、C言語やC++では**同じ**タイプですが、根本的に異なるセマンティクスを持っています。 [BSTR](https://msdn.microsoft.com/en-us/library/windows/desktop/ms221069.aspx)は、長さ接頭辞、データ文字列、およびターミネータで構成される複合データ型です。カウントされた文字列として、埋め込まれたNUL文字を含むことができます。一方、Cスタイルの文字列はゼロ終端されているため、NUL文字を含めることはできません。これは、明示的な長さ接頭辞を保持しないためです。実際の 'BSTR'を使用するときにどんなエラーコードが表示されますか? – IInspectable
エラーコードは「0x80041008」と同じです。 – ST3