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

O método IWbemEventSink::SetSinkSecurity é usado para definir um descritor de segurança (SD) em um coletor para todos os eventos que passam. O WMI manipula as verificações de acesso com base no SD. Use esse método quando o provedor não puder controlar quais usuários têm permissão para consumir seus eventos, mas pode definir um SD para um coletor específico.

Sintaxe

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

Parâmetros

[in] lSDLength

Comprimento do descritor de segurança.

[in] pSD

Descritor de segurança, DACL.

Retornar valor

Esse método retorna um HRESULT que indica o status da chamada de método. A lista a seguir lista o valor contido em um HRESULT.

Comentários

A DACL do SD define quem tem acesso aos eventos. A ACE (entrada de controle de acesso) de um consumidor que busca acesso aos eventos entregues ao coletor deve corresponder a um ACE com WBEM_RIGHT_SUBSCRIBE definido no parâmetro pSD . O proprietário e o grupo do SD especificam a identidade a ser usada ao gerar o evento. Essa identidade pode ser diferente da identidade da conta que gera o evento; no entanto, ao verificar o acesso do evento em um SD de filtro, a identidade do usuário e a identidade especificada no campo proprietário são verificadas quanto ao acesso. Para obter mais informações, consulte a propriedade EventAccess da classe __EventFilter . O campo de grupo do SD deve ser definido e o campo SACL não é usado. Para obter mais informações sobre a segurança do evento e quando usar esse método, consulte Protegendo eventos WMI.

Para obter mais informações sobre como fornecer eventos, consulte Escrevendo um provedor de eventos.

Exemplos

O exemplo de código a seguir define o SD para todos os eventos fornecidos por meio do coletor. O código requer as seguintes instruções #include e referências.

#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 com suporte Windows Vista
Servidor mínimo com suporte Windows Server 2008
Plataforma de Destino Windows
Cabeçalho wbemprov.h (inclua Wbemidl.h)
Biblioteca Wbemuuid.lib
DLL Wbemsvc.dll