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 |