降低個別進程中接收的安全性
Windows Management Instrumentation (WMI) 可以建立接收,以在個別進程中接收用戶端應用程式的非同步回呼。 個別的程式Unsecapp.exe。 使用 IWbemUnsecuredApartment 介面。 IWbemUnsecuredApartment 可讓您控制Unsecapp.exe驗證接收的回呼。 如需詳細資訊,請參閱 在非同步呼叫上設定安全性。
然後,您可以降低該程式的安全性,而 WMI 可以存取接收,而不受限制。 為了協助使用這項技術,WMI 提供Unsecapp.exe程式,以作為個別進程運作。 您可以使用 IUnsecuredApartment 介面的呼叫來裝載Unsecapp.exe。
IUnsecuredApartment介面可讓用戶端應用程式建立個別的專用進程,執行Unsecapp.exe來裝載IWbemObjectSink實作。 專用進程可以呼叫 CoInitializeSecurity ,將專用進程的存取權授與 WMI,而不會危害主要進程的安全性。 初始化之後,專用進程會作為主要進程與 WMI 之間的媒介。
下列程式描述如何使用 IUnsecuredApartment執行非同步呼叫。
使用 IUnsecuredApartment 執行非同步呼叫
建立具有 CoCreateInstance呼叫的專用程式。
下列程式碼範例會呼叫 CoCreateInstance 來建立專用進程。
IUnsecuredApartment* pUnsecApp = NULL; CoCreateInstance(CLSID_UnsecuredApartment, NULL, CLSCTX_LOCAL_SERVER, IID_IUnsecuredApartment, (void**)&pUnsecApp);
具現化接收物件。
下列程式碼範例會建立新的接收物件。
CMySink* pSink = new CMySink; pSink->AddRef();
建立接收的存根。
存根是從接收產生的包裝函式。
下列程式碼範例會呼叫 CreateObjectStub 來建立接收的存根。
IUnknown* pStubUnk = NULL; pUnsecApp->CreateObjectStub(pSink, &pStubUnk);
呼叫包裝函式的 QueryInterface ,並要求 IWbemObjectSink 介面的指標。
下列程式碼範例會呼叫 QueryInterface ,並要求 IWbemObjectSink 介面的指標。
IWbemObjectSink* pStubSink = NULL; pStubUnk->QueryInterface(IID_IWbemObjectSink, (void **)&pStubSink); pStubUnk->Release();
釋放接收物件指標。
您可以釋放物件指標,因為存根現在擁有指標。
下列程式碼範例會釋放接收物件指標。
pSink->Release();
在任何非同步呼叫中使用存根。
當呼叫完成時,請釋放本機參考計數。
下列程式碼範例會在非同步呼叫中使用存根。
// pServices is an IWbemServices* object pServices->CreateInstanceEnumAsync(strClassName, 0, NULL, pStubSink);
有時候,您可能必須取消呼叫之後的非同步呼叫。 如果您需要取消呼叫,請使用原本進行呼叫的相同指標取消呼叫。
下列程式碼範例示範如何取消非同步呼叫。
pServices->CancelAsyncCall(pStubSink);
使用非同步呼叫完成時,請釋放本機參考計數。
只有在您確認非同步呼叫不需要取消之後,才釋放 pStubSink 指標。 此外,請勿在 WMI 釋放 pSink 接收指標之後釋放pStubSink。 在pSink之後釋放pStubSink會建立迴圈參考計數,讓接收和存根永遠保留在記憶體中。 相反地,釋放指標的可能位置是在 IWbemObjectSink::SetStatus 呼叫中,由 WMI 進行,以報告原始非同步呼叫已完成。
完成時,使用 對 Release () 的呼叫來取消初始化 COM。
下列程式碼範例示範如何在pUnsecApp指標上呼叫Release () 。
pUnsecApp->Release();
本主題中的程式碼範例需要下列參考和#include語句才能正確編譯。
#include <wbemidl.h> #pragma comment(lib, "wbemuuid.lib")
如需 CoInitializeSecurity 函式和參數的詳細資訊,請參閱平臺軟體發展工具組 (SDK) 中的 COM 檔。