Freigeben über


IWbemEventSink::SetSinkSecurity-Methode (wbemprov.h)

Die IWbemEventSink::SetSinkSecurity-Methode wird verwendet, um einen Sicherheitsdeskriptor (SD) für alle ereignisse festzulegen, die durchlaufen werden. WMI verarbeitet die Zugriffsprüfungen basierend auf dem SD. Verwenden Sie diese Methode, wenn der Anbieter nicht steuern kann, welche Benutzer seine Ereignisse nutzen dürfen, aber einen SD für eine bestimmte Senke festlegen kann.

Syntax

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

Parameter

[in] lSDLength

Länge der Sicherheitsbeschreibung.

[in] pSD

Sicherheitsdeskriptor, DACL.

Rückgabewert

Diese Methode gibt ein HRESULT zurück, das den Status des Methodenaufrufs angibt. Die folgende Liste listet den Wert auf, der in einem HRESULT enthalten ist.

Hinweise

Die SD-DACL definiert, wer Zugriff auf die Ereignisse hat. Der Zugriffssteuerungseintrag (Access Control Entry, ACE) eines Consumers, der Zugriff auf die an die Senke übermittelten Ereignisse sucht, muss mit einem ACE mit WBEM_RIGHT_SUBSCRIBE im pSD-Parameter übereinstimmen. Der SD-Besitzer und die SD-Gruppe geben die Identität an, die beim Auslösen des Ereignisses verwendet werden soll. Diese Identität kann sich von der Identität des Kontos unterscheiden, das das Ereignis auslöst. Beim Überprüfen des Zugriffs auf das Ereignis mit einem Filter-SD werden jedoch sowohl die Identität des Benutzers als auch die im Feld Besitzer angegebene Identität auf Zugriff überprüft. Weitere Informationen finden Sie in der EventAccess-Eigenschaft der __EventFilter-Klasse . Das Gruppenfeld des SD muss festgelegt werden, und das SACL-Feld wird nicht verwendet. Weitere Informationen zur Ereignissicherheit und zur Verwendung dieser Methode finden Sie unter Schützen von WMI-Ereignissen.

Weitere Informationen zum Bereitstellen von Ereignissen finden Sie unter Schreiben eines Ereignisanbieters.

Beispiele

Im folgenden Codebeispiel wird der SD für alle Ereignisse festgelegt, die über die Senke bereitgestellt werden. Der Code erfordert die folgenden #include-Anweisungen und Verweise.

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

Anforderungen

   
Unterstützte Mindestversion (Client) Windows Vista
Unterstützte Mindestversion (Server) Windows Server 2008
Zielplattform Windows
Kopfzeile wbemprov.h (include Wbemidl.h)
Bibliothek Wbemuuid.lib
DLL Wbemsvc.dll