Udostępnij za pośrednictwem


Ustawianie zabezpieczeń w usłudze IWbemServices i innych serwerach proxy

W języku C++ można ustawić zabezpieczenia w całym procesie, wywołując CoInitializeSecurity przed nawiązaniem połączenia z usługą WMI za pośrednictwem IWbemLocator::ConnectServer. Możesz również zmienić poziom uwierzytelniania, poziom personifikacji lub usługę uwierzytelniania w wywołaniu, które uzyskuje wskaźnik do serwera proxy WMI, takiego jak IWbemServices lub IWbemCallResult. Wywoływanie CoSetProxyBlanket umożliwia również zmianę usługi uwierzytelniania (Kerberos, NTLM lub negocjacja).

Skrypty i aplikacje języka Visual Basic ustawiają zabezpieczenia tylko na serwerach proxy pośrednio za pośrednictwem wywołań SWbemServices i innych obiektów automatyzacji. Aby uzyskać więcej informacji na temat ustawiania i zmieniania uwierzytelniania i personifikacji w skrypcie, zobacz Ustawianie domyślnego poziomu zabezpieczeń procesu przy użyciu języka VBScript.

Zmiana poziomów zabezpieczeń lub usług jest przede wszystkim problemem podczas nawiązywania połączenia z usługą WMI na komputerze zdalnym, na którym działa inny system operacyjny. Aby uzyskać więcej informacji, zobacz Łączenie między różnymi systemami operacyjnymi.

Aplikacja kliencka łączy się z serwerem proxy usługi WMI przy użyciu tożsamości. Tożsamość to obiekt danych, który składa się z nazwy użytkownika, hasła i ustawień urzędu. W przypadku aplikacji klienckiej usługi WMI wywołanie interfejsu IWbemLocator::ConnectServer tworzy tożsamość początkową. Metoda ConnectServer przyjmuje tożsamość w zestawie trzech parametrów, które można ustawić na wartość null, aby wskazać bieżącego użytkownika. Można również określić parametro wartości innej niż NULL, aby wskazać określonego użytkownika i domeny. Jeśli wywołanie zakończy się pomyślnie, ConnectServer zwraca wskaźnik, za pomocą którego można uzyskać dostęp do różnych procesów zdalnych, takich jak usługa WMI lub system operacyjny Windows bezpośrednio.

Podobnie jak wiele interfejsów COM, ConnectServer zwraca wskaźnik do serwera proxy. Proxy to obiekt danych reprezentujący proces zdalny, taki jak WMI lub zdalny dostawca. Model COM używa serwera proxy, aby umożliwić deweloperom dostęp do danych zdalnych, tak jakby dane były lokalne.

Następujące interfejsy WMI używają serwerów proxy:

Po otrzymaniu wskaźnika do zdalnego procesu można wykonać jedną z dwóch czynności. Jeśli wiesz, co robi proces, możesz wybrać ustawienie zabezpieczeń wskaźnika i uzyskać dostęp do procesu normalnie. Tak jest w przypadku większości wskaźników do usługi WMI. Aby uzyskać więcej informacji, zobacz Ustawianie poziomów zabezpieczeń w połączeniu usługi WMI. Alternatywnie musisz uzyskać dostęp do innego interfejsu COM na serwerze proxy, takiego jak IUnknown::Release, za pomocą wywołania interfejsu IUnknown na serwerze proxy.

Wartości domyślne i zalecenia

Rozproszona wersja modelu obiektów składników (DCOM) negocjuje domyślną usługę uwierzytelniania (Kerberos, NTLM lub Negotiate) i nie można określić domyślnej usługi uwierzytelniania przy użyciu CoInitializeSecurity. Określenie RPC_C_AUTHN_DEFAULT w parametrze usługi uwierzytelniania CoSetProxyBlanket umożliwia dcOM wybranie odpowiedniej usługi. W przypadku połączeń zdalnych usługa domyślna to Negotiate, która jest zalecaną usługą dla aplikacji działających zarówno w domenach Kerberos, jak i innych niż Kerberos. W przypadku połączeń lokalnych domyślną usługą uwierzytelniania jest NT LAN Manager (NTLM).

W poniższym przykładzie kodu przedstawiono domyślną używaną usługę uwierzytelniania.

// 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
     );

Przykład kodu w tym temacie wymaga następującej referencji i dyrektyw #include.

#define _WIN32_DCOM
#include <wbemidl.h>
#include <comdef.h>

#pragma comment(lib, "wbemuuid.lib")

W przypadku skryptów zaleca się użycie wartości domyślnie wybieranych przez DCOM dla wywołań zdalnych. Na komputerze lokalnym nie można określić usługi uwierzytelniania dla wywołań do usługi WMI. Aby uzyskać więcej informacji, zobacz sekcję Ustawianie usługi uwierzytelniania za pomocą VBScript oraz Konstrukcja ciągu Moniker.