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 |