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,並在pSD參數中設定WBEM_RIGHT_SUBSCRIBE。 SD 擁有者和群組會指定要在引發事件時使用的身分識別。 此身分識別可以不同于引發事件的帳戶身分識別;不過,針對篩選 SD 檢查事件的存取權時,會檢查使用者身分識別和擁有者欄位中所指定的身分識別,以取得存取權。 如需詳細資訊,請參閱__EventFilter類別的EventAccess屬性。 必須設定 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
標頭 wbemprov.h (包含 Wbemidl.h)
程式庫 Wbemuuid.lib
Dll Wbemsvc.dll