Partager via


Méthode IWbemEventSink::SetSinkSecurity (wbemprov.h)

La méthode IWbemEventSink::SetSinkSecurity est utilisée pour définir un descripteur de sécurité (SD) sur un récepteur pour tous les événements passants. WMI gère les vérifications d’accès en fonction du SD. Utilisez cette méthode lorsque le fournisseur ne peut pas contrôler quels utilisateurs sont autorisés à consommer ses événements, mais peut définir un SD pour un récepteur spécifique.

Syntaxe

HRESULT SetSinkSecurity(
  [in] long lSDLength,
  [in] BYTE *pSD
);

Paramètres

[in] lSDLength

Longueur du descripteur de sécurité.

[in] pSD

Descripteur de sécurité, DACL.

Valeur retournée

Cette méthode retourne une valeur HRESULT qui indique le statut de l'appel de méthode. La liste suivante répertorie la valeur contenue dans un HRESULT.

Remarques

La liste de contrôle d’accès (DACL) SD définit qui a accès aux événements. L’entrée de contrôle d’accès (ACE) d’un consommateur qui cherche à accéder aux événements remis au récepteur doit correspondre à un ACE avec WBEM_RIGHT_SUBSCRIBE défini dans le paramètre pSD . Le propriétaire et le groupe SD spécifient l’identité à utiliser lors du déclenchement de l’événement. Cette identité peut être différente de l’identité du compte qui déclenche l’événement ; toutefois, lors de la vérification de l’accès de l’événement par rapport à un SD de filtre, l’identité de l’utilisateur et l’identité spécifiée dans le champ propriétaire sont vérifiées pour l’accès. Pour plus d’informations, consultez la propriété EventAccess de la classe __EventFilter . Le champ de groupe du SD doit être défini et le champ SACL n’est pas utilisé. Pour plus d’informations sur la sécurité des événements et le moment d’utiliser cette méthode, consultez Sécurisation des événements WMI.

Pour plus d’informations sur la fourniture d’événements, consultez Écriture d’un fournisseur d’événements.

Exemples

L’exemple de code suivant définit le SD pour tous les événements fournis via le récepteur. Le code nécessite les #include instructions et références suivantes.

#define _WIN32_WINNT 0x0500
#define SECURITY_WIN32
#pragma comment(lib, "wbemuuid.lib")
#pragma comment(lib, "Secur32.lib")
#include <windows.h>
#include <sddl.h>
#include <wbemidl.h>
#include <security.h>
#include <iostream>
using namespace std;

HRESULT CMyEventProvider::ProvideEvents( IWbemObjectSink *pSink,
                                            long lFlags )
{
    IWbemEventSink *pEventSink = NULL;
    //Create SD with allowing only administrators
    // to receive events. O:BAG:BAD:(A;;0x40;;;BA)
     long lMask = WBEM_RIGHT_SUBSCRIBE;
     WCHAR wBuf[MAX_PATH];
     _ltow( lMask, wBuf, 16 );
 
       wstring wstrSD = L"O:BAG:BAD:(A;;0x";
        wstrSD += lMask;
       wstrSD += L";;;BA)";
    ULONG ulSize = 0;
    PSECURITY_DESCRIPTOR pSD = NULL;
 
    ConvertStringSecurityDescriptorToSecurityDescriptorW(
        wstrSD.c_str(), SDDL_REVISION_1, &pSD, &ulSize ); 
    HRESULT hRes = pSink->QueryInterface( IID_IWbemEventSink,
        (void**)pEventSink );
    if( SUCCEEDED(hRes) )
        hRes = pEventSink->SetSinkSecurity( ulLength, pSD );
    LocalFree(pSD );
    return hRes;
}

Configuration requise

   
Client minimal pris en charge Windows Vista
Serveur minimal pris en charge Windows Server 2008
Plateforme cible Windows
En-tête wbemprov.h (inclure Wbemidl.h)
Bibliothèque Wbemuuid.lib
DLL Wbemsvc.dll