勇芳软件工作室.汉化:  Windows Management Instrumentation > COM API for WMI > Interfaces > IWbemEventSink >

SetSinkSecurity Method

Previous pageReturn to chapter overviewNext page

描述

 

IWbemEventSink.SetSinkSecurity方法用于为传入的所有事件在宿上设置安全描述符(SD)。WMI根据SD处理访问检查。当提供程序无法控制哪些用户可以使用其消息的事件,但可以为特定的接收器设置SD时,请使用此方法。

 

C++ 语法

 

HRESULT SetSinkSecurity(

[in]  LONG ISDLength,

[in]  BYTE *pSD

);

 

PowerBASIC 语法

 

METHOD SetSinkSecurity ( _

BYVAL ISDLength AS LONG, _

BYVAL pSD AS BYTE PTR _

) AS LONG

 

参数

 

lSDLength

 

安全描述符长度。

 

pSD

 

安全描述符,铲球。

 

返回值

 

此方法返回一个HRESULT,表示方法调用的状态。下表列出了HRESULT中包含的值。

 

退货代码

描述

WBEM_S_NO_ERROR

该方法成功。

WBEM_E_INVALID_PARAMETER

安全描述符无效。所有者或组字段未设置。

 

示例代码

 

以下代码示例为通过sink提供的所有事件设置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;

}

 

备注

 

SD DACL定义谁可以访问事件。寻求访问传送到接收器的事件的消费者的访问控制条目(ACE)必须与ACE和pSD参数中设置的WBEM_RIGHT_SUBSCRIBE相匹配。SD所有者和组指定在提出事件时使用的身份。该身份可能与提起事件的帐户的身份不同;然而,当检查事件对过滤器SD的访问时,检查用户的身份和所有者字段中指定的身份,以进行访问。有关详细信息,请参阅__EventFilter类的EventAccess属性。必须设置SD的组合字段,并且不使用SACL字段。有关事件安全性的更多信息以及何时使用此方法,请参阅保护WMI事件.

 

有关提供事件的更多信息,请参阅写一个事件提供者.

 

要求

 

客户

需要Windows Vista或Windows XP。

服务器

需要Windows Server 2008或Windows Server 2003。

在Wbemprov.inc中声明。

DLL

需要Wbemsvc.dll。