Метод IWbemEventSink::SetSinkSecurity (wbemprov.h)

Метод IWbemEventSink::SetSinkSecurity используется для задания дескриптора безопасности (SD) в приемнике для всех событий, проходящих через. WMI обрабатывает проверки доступа на основе SD. Используйте этот метод, если поставщик не может контролировать, каким пользователям разрешено использовать его события, но может задать SD для конкретного приемника.

Синтаксис

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

Параметры

[in] lSDLength

Длина дескриптора безопасности.

[in] pSD

Дескриптор безопасности, DACL.

Возвращаемое значение

Этот метод возвращает HRESULT , указывающий состояние вызова метода. В следующем списке перечислены значения, содержащиеся в HRESULT.

Комментарии

SD DACL определяет, кто имеет доступ к событиям. Запись управления доступом (ACE) потребителя, стремящегося получить доступ к событиям, доставленным в приемник, должна соответствовать ACE с WBEM_RIGHT_SUBSCRIBE задано в параметре pSD . Владелец SD и группа указывают удостоверение, которое будет использоваться при вызове события. Это удостоверение может отличаться от удостоверения учетной записи, вызывающего событие; Однако при проверке доступа к событию по SD фильтра проверяется как удостоверение пользователя, так и удостоверение, указанное в поле владельца. Дополнительные сведения см. в разделе Свойство EventAccess класса __EventFilter . Поле группы SD должно быть задано, а поле SACL не используется. Дополнительные сведения о безопасности событий и времени использования этого метода см. в разделе Защита событий WMI.

Дополнительные сведения о предоставлении событий см. в статье Запись поставщика событий.

Примеры

В следующем примере кода задается SD для всех событий, предоставляемых через приемник. Для кода требуются следующие инструкции и ссылки #include.

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

Требования

   
Минимальная версия клиента Windows Vista
Минимальная версия сервера Windows Server 2008
Целевая платформа Windows
Header wbemprov.h (включая Wbemidl.h)
Библиотека Wbemuuid.lib
DLL Wbemsvc.dll