描述
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。 |


