Bagikan melalui


Metode IWbemEventSink::SetSinkSecurity (wbemprov.h)

Metode IWbemEventSink::SetSinkSecurity digunakan untuk mengatur pendeskripsi keamanan (SD) pada sink untuk semua peristiwa yang dilewati. WMI menangani pemeriksaan akses berdasarkan SD. Gunakan metode ini ketika penyedia tidak dapat mengontrol pengguna apa yang diizinkan untuk mengonsumsi peristiwanya, tetapi dapat mengatur SD untuk sink tertentu.

Sintaks

HRESULT SetSinkSecurity(
  [in] long lSDLength,
  [in] BYTE *pSD
);

Parameter

[in] lSDLength

Panjang deskriptor keamanan.

[in] pSD

Pendeskripsi keamanan, DACL.

Menampilkan nilai

Metode ini mengembalikan HRESULT yang menunjukkan status panggilan metode. Daftar berikut mencantumkan nilai yang terkandung dalam HRESULT.

Keterangan

SD DACL mendefinisikan siapa yang memiliki akses ke peristiwa. Entri kontrol akses (ACE) konsumen yang mencari akses ke peristiwa yang dikirimkan ke sink harus cocok dengan ACE dengan WBEM_RIGHT_SUBSCRIBE yang diatur dalam parameter pSD . Pemilik dan grup SD menentukan identitas yang akan digunakan saat menaikkan peristiwa. Identitas ini dapat berbeda dari identitas akun yang menaikkan peristiwa; namun, saat memeriksa akses peristiwa terhadap SD filter, identitas pengguna dan identitas yang ditentukan di bidang pemilik diperiksa untuk akses. Untuk informasi selengkapnya, lihat properti EventAccess dari kelas __EventFilter . Bidang grup SD harus diatur dan bidang SACL tidak digunakan. Untuk informasi selengkapnya tentang keamanan peristiwa dan kapan menggunakan metode ini, lihat Mengamankan Peristiwa WMI.

Untuk informasi selengkapnya tentang menyediakan peristiwa, lihat Menulis Penyedia Peristiwa.

Contoh

Contoh kode berikut mengatur SD untuk semua peristiwa yang disediakan melalui sink. Kode memerlukan pernyataan dan referensi #include berikut.

#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;
}

Persyaratan

   
Klien minimum yang didukung Windows Vista
Server minimum yang didukung Windows Server 2008
Target Platform Windows
Header wbemprov.h (termasuk Wbemidl.h)
Pustaka Wbemuuid.lib
DLL Wbemsvc.dll