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 |