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

El método IWbemEventSink::SetSinkSecurity se usa para establecer un descriptor de seguridad (SD) en un receptor para todos los eventos que pasan. WMI controla las comprobaciones de acceso basadas en sd. Use este método cuando el proveedor no pueda controlar qué usuarios pueden consumir sus eventos, pero puede establecer un SD para un receptor específico.

Sintaxis

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

Parámetros

[in] lSDLength

Longitud del descriptor de seguridad.

[in] pSD

Descriptor de seguridad, DACL.

Valor devuelto

Este método devuelve un valor HRESULT que indica el estado de la llamada al método. En la lista siguiente se muestra el valor contenido en un HRESULT.

Comentarios

La DACL de SD define quién tiene acceso a los eventos. La entrada de control de acceso (ACE) de un consumidor que busca acceso a los eventos entregados al receptor debe coincidir con una ACE con WBEM_RIGHT_SUBSCRIBE establecido en el parámetro pSD . El propietario y el grupo sd especifican la identidad que se va a usar al generar el evento. Esta identidad puede ser diferente de la identidad de la cuenta que genera el evento; Sin embargo, al comprobar el acceso del evento en un SD de filtro, se comprueba la identidad del usuario y la identidad especificada en el campo propietario para obtener acceso. Para obtener más información, vea la propiedad EventAccess de la clase __EventFilter . El campo de grupo del SD debe establecerse y no se usa el campo SACL. Para obtener más información sobre la seguridad de eventos y cuándo usar este método, consulte Protección de eventos WMI.

Para obtener más información sobre cómo proporcionar eventos, consulte Escritura de un proveedor de eventos.

Ejemplos

En el ejemplo de código siguiente se establece la SD para todos los eventos proporcionados a través del receptor. El código requiere las siguientes instrucciones y referencias de #include.

#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;
}

Requisitos

   
Cliente mínimo compatible Windows Vista
Servidor mínimo compatible Windows Server 2008
Plataforma de destino Windows
Encabezado wbemprov.h (include Wbemidl.h)
Library Wbemuuid.lib
Archivo DLL Wbemsvc.dll