Delen via


De beveiliging op IWbemServices en andere proxy's instellen

In C++ kunt u de beveiliging voor het hele proces instellen door CoInitializeSecurity- aan te roepen voordat u verbinding maakt met WMI via IWbemLocator::ConnectServer. U kunt ook het verificatieniveau, imitatieniveau of de verificatieservice wijzigen in een aanroep waarmee een aanwijzer naar een WMI-proxy wordt verkregen, zoals IWbemServices- of IWbemCallResult-. Als u CoSetProxyBlanket aanroept, kunt u ook de verificatieservice (Kerberos, NTLM of onderhandelen) wijzigen.

Scripts en Visual Basic-toepassingen stellen alleen indirect beveiliging in op proxy's via aanroepen naar SWbemServices en andere automatiseringsobjecten. Zie voor meer informatie over het instellen en wijzigen van verificatie en imitatie in script het standaardprocesbeveiligingsniveau instellen met behulp van VBScript.

Het wijzigen van beveiligingsniveaus of -services is voornamelijk een probleem bij het maken van verbinding met WMI op een externe computer waarop een ander besturingssysteem wordt uitgevoerd. Zie Verbinding maken tussen verschillende besturingssystemenvoor meer informatie.

Een clienttoepassing maakt verbinding met een WMI-proxy met behulp van een identiteit. Een identiteit is een gegevensobject dat bestaat uit een gebruikersnaam, wachtwoord en instantie-instellingen. Voor een WMI-clienttoepassing creƫert de aanroep naar de IWbemLocator::ConnectServer interface de eerste identiteit. De methode ConnectServer neemt de identiteit in een set van drie parameters, die u kunt instellen op NULL- om de huidige gebruiker aan te geven. U kunt ook een niet-null- parameter opgeven om een specifieke gebruiker en domein aan te geven. Als de aanroep is geslaagd, retourneert ConnectServer een aanwijzer waarmee u rechtstreeks toegang hebt tot verschillende externe processen, zoals een WMI-service of het Windows-besturingssysteem.

Net als bij veel COM-interfaces retourneert ConnectServer een aanwijzer naar een proxy. Een proxy is een gegevensobject dat een extern proces vertegenwoordigt, zoals WMI of een externe provider. COM gebruikt een proxy om ontwikkelaars toegang te geven tot externe gegevens alsof de gegevens lokaal zijn.

De volgende WMI-interfaces maken gebruik van proxy's:

Nadat u een aanwijzer naar een extern proces hebt ontvangen, kunt u een van de twee dingen doen. Als u weet wat het proces doet, kunt u ervoor kiezen om de beveiliging op de aanwijzer in te stellen en het proces normaal te openen. Dit is het geval bij de meeste aanwijzers naar een WMI-service. Zie Beveiligingsniveaus instellen voor een WMI-verbindingvoor meer informatie. U moet ook toegang krijgen tot een andere COM-interface op de proxy, zoals IUnknown::Release, via een aanroep naar de IUnknown-interface op de proxy.

Standaardinstellingen en aanbevelingen

De gedistribueerde versie van het Component Object Model (DCOM) onderhandelt over de standaardverificatieservice (Kerberos, NTLM of Negotiate) en u kunt de standaardverificatieservice niet opgeven met behulp van CoInitializeSecurity. Door RPC_C_AUTHN_DEFAULT op te geven in de parameter voor de verificatieservice van CoSetProxyBlanket kan DCOM de juiste service selecteren. Voor externe verbindingen is de standaardservice Negotiate. Dit is de aanbevolen service voor toepassingen die werken in zowel Kerberos- als niet-Kerberos-domeinen. Voor lokale verbindingen is de standaardverificatieservice NT LAN Manager (NTLM).

In het volgende codevoorbeeld ziet u de standaardverificatieservice die wordt gebruikt.

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

Voor het codevoorbeeld in dit onderwerp zijn de volgende referentie- en #include-instructies vereist.

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

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

Voor het uitvoeren van scripts wordt aanbevolen dat u de standaardinstellingen gebruikt die DCOM selecteert voor externe aanroepen. Op de lokale computer kunt u geen verificatieservice opgeven voor aanroepen naar WMI. Zie voor meer informatie Het instellen van de verificatieservice met behulp van VBScript- en het maken van een Moniker-tekenreeks.