次の方法で共有


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) は、pSD パラメーターに設定されたWBEM_RIGHT_SUBSCRIBEを持つ ACE と一致する必要があります。 SD 所有者とグループは、イベントの発生時に使用する ID を指定します。 この ID は、イベントを発生させるアカウントの ID とは異なる場合があります。ただし、フィルター SD に対してイベントのアクセスを確認する場合は、ユーザーの ID と所有者フィールドで指定された ID の両方がアクセスを確認します。 詳細については、__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 を含む)
Library Wbemuuid.lib
[DLL] Wbemsvc.dll