Metodo IWbemEventSink::SetSinkSecurity (wbemprov.h)

Il metodo IWbemEventSink::SetSinkSecurity viene usato per impostare un descrittore di sicurezza (SD) su un sink per tutti gli eventi che passano. WMI gestisce i controlli di accesso in base allo SD. Usare questo metodo quando il provider non può controllare gli utenti autorizzati a utilizzare gli eventi, ma può impostare uno SD per un sink specifico.

Sintassi

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

Parametri

[in] lSDLength

Lunghezza del descrittore di sicurezza.

[in] pSD

Descrittore di sicurezza, DACL.

Valore restituito

Questo metodo restituisce un valore HRESULT che indica lo stato della chiamata al metodo. L'elenco seguente elenca il valore contenuto in hrESULT.

Commenti

Sd DACL definisce chi può accedere agli eventi. La voce di controllo di accesso (ACE) di un consumer che cerca l'accesso agli eventi recapitati al sink deve corrispondere a un ace con WBEM_RIGHT_SUBSCRIBE impostato nel parametro pSD . Il proprietario e il gruppo SD specificano l'identità da usare durante la generazione dell'evento. Questa identità può essere diversa dall'identità dell'account che genera l'evento; Tuttavia, quando si controlla l'accesso all'evento in base a un filtro SD, vengono controllate sia l'identità dell'utente che l'identità specificata nel campo proprietario. Per altre informazioni, vedere la proprietà EventAccess della classe __EventFilter . Il campo del gruppo di SD deve essere impostato e il campo SACL non viene usato. Per altre informazioni sulla sicurezza degli eventi e su quando usare questo metodo, vedere Protezione degli eventi WMI.

Per altre informazioni sulla fornitura di eventi, vedere Scrittura di un provider di eventi.

Esempio

L'esempio di codice seguente imposta lo SD per tutti gli eventi forniti tramite il sink. Il codice richiede le istruzioni e i riferimenti #include seguenti.

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

Requisiti

   
Client minimo supportato Windows Vista
Server minimo supportato Windows Server 2008
Piattaforma di destinazione Windows
Intestazione wbemprov.h (include Wbemidl.h)
Libreria Wbemuuid.lib
DLL Wbemsvc.dll