在 IWbemServices 和其他 Proxy 上設定安全性

在 C++ 中,您可以先呼叫 CoInitializeSecurity ,再透過 IWbemLocator::ConnectServer連線到 WMI,以設定整個進程的安全性。 您也可以在呼叫中變更驗證層級、模擬層級或驗證服務,以取得 WMI Proxy 的指標,例如 IWbemServicesIWbemCallResult。 呼叫 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:

收到遠端進程的指標之後,您可以執行兩件事之一。 如果您知道此程式的功能,您可以選擇在指標上設定安全性,並正常存取程式。 這是 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 字串