在 IWbemServices 和其他 Proxy 上設定安全性
在 C++ 中,您可以呼叫 CoInitializeSecurity,再透過 IWbemLocator::ConnectServer連線到 WMI,以設定整個程式的安全性。 您也可以在取得 WMI Proxy 指標的呼叫中變更驗證層級、模擬層級或驗證服務,例如 IWbemServices 或 IWbemCallResult。 呼叫 CoSetProxyBlanket 也可讓您變更驗證服務(Kerberos、NTLM 或交涉)。
腳本和 Visual Basic 應用程式只會透過呼叫 SWbemServices 和其他自動化物件,間接設定 Proxy 的安全性。 如需在腳本中設定和變更驗證和仿真的詳細資訊,請參閱 使用 VBScript 設定預設進程安全性層級。
變更安全性層級或服務主要是在執行不同作系統的遠端電腦上連線到WMI時所關心的問題。 如需詳細資訊,請參閱 連接不同作業系統。
用戶端應用程式會使用身分識別連線到 WMI Proxy。 身分識別是由使用者名稱、密碼和授權單位設定所組成的數據物件。 針對 WMI 用戶端應用程式,呼叫 IWbemLocator::ConnectServer 介面會建立初始身分識別。 ConnectServer 方法會採用一組三個參數中的身分識別,您可以將其設定為 NULL,以指出目前的使用者。 您也可以指定非NULL 參數,以指出特定的用戶和網域。 如果呼叫成功,ConnectServer 會傳回指標,您可以經由該指標存取各種的遠端程序,例如 WMI 服務或 Windows 作業系統。
如同許多 COM 介面,ConnectServer 會傳回 Proxy 的指標。 Proxy 是代表遠端進程的數據物件,例如 WMI 或遠端提供者。 COM 會使用 Proxy 來允許開發人員存取遠端數據,就像數據是本機數據一樣。
下列 WMI 介面使用 Proxy:
IWbemServices (SWbemServices 腳本物件)
IWbemRefresher (SWbemRefresher 腳本物件)
WMI 重新整理器是特殊案例,因為它會傳遞 IWbemServices 指標,其安全性設定必須正確設定。 如需使用重新整理器對象的詳細資訊,請參閱在 C++ 中存取效能資料。
收到遠端進程的指標之後,您可以執行兩項動作之一。 如果您知道此程式的功能,您可以選擇在指標上設定安全性,並正常存取程式。 這是大多數指向 WMI 服務的指標的情況。 如需詳細資訊,請參閱 在 WMI 連線上設定安全性層級。 或者,您需要在代理上透過對 IUnknown 介面進行呼叫,來存取代理上的不同 COM 介面,例如 IUnknown::Release。
預設值和建議
元件物件模型 (DCOM) 的分散式版本會交涉預設驗證服務 (Kerberos、NTLM 或 Negotiate),您無法使用 CoInitializeSecurity來指定預設驗證服務。 在 coSetProxyBlanket 的驗證服務參數中指定 RPC_C_AUTHN_DEFAULT 可讓 DCOM 選取適當的服務。 針對遠端連線,預設服務為 Negotiate,這是 Kerberos 和非 Kerberos 網域中運作之應用程式的建議服務。 針對本機連線,默認驗證服務為NT LAN Manager(NTLM)。
下列程式代碼範例顯示正在使用的預設驗證服務。
// The pWbemServices variable is of type IWbemServices*
HRESULT hr = CoSetProxyBlanket(
pWbemServices, //Proxy
RPC_C_AUTHN_DEFAULT, //Authentication service
RPC_C_AUTHZ_DEFAULT, //Authorization service
COLE_DEFAULT_PRINCIPAL, //Server principal name used
// by authentication service
RPC_C_AUTHN_LEVEL_DEFAULT, //Authentication level
RPC_C_IMP_LEVEL_IMPERSONATE, //Impersonation level
COLE_DEFAULT_AUTHINFO, //Client identity
EOAC_DEFAULT //Capability flags
);
本主題中的程式碼範例需要下列參考和 #include 語句。
#define _WIN32_DCOM
#include <wbemidl.h>
#include <comdef.h>
#pragma comment(lib, "wbemuuid.lib")
針對腳本,建議您使用 DCOM 針對遠端呼叫選取的預設值。 在本機計算機上,您無法為對 WMI 的呼叫指定驗證服務。 如需詳細資訊,請參閱 使用 VBScript 設定驗證服務 和 建構 Moniker 字元串。