在 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 連線上設定安全性層級。 或者,您必須透過對 Proxy 上的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 字串。