Share via


安全地提供事件

您可以防止未經授權的使用者接收他們不應存取的事件。 事件提供者可以提供自己的事件類別實例,就像 系統登錄提供者 提供 RegistryKeyChangeEvent之類的類別一樣。 事件提供者也可以傳遞內建事件,例如 __InstanceCreationEvent。 如需詳細資訊,請參閱 撰寫事件提供者

事件提供者可以透過下列方式控制事件收件者的存取:

  • 藉由實作 IWbemEventProviderSecurity::AccessCheck 來使用存取控制是最有效率的方式。

    提供者會判斷取用者是否具有接收要求事件的許可權。 如果取用者沒有足夠的許可權可註冊,WMI 會傳回拒絕存取錯誤。 當提供者可以決定誰可以接收事件時,請使用此模式。 例如,提供者可能會提供安全性相關事件,而且可能需要取用者具有已啟用 SeSecurityPrivilege 許可權的系統管理員許可權。

  • 在用來引發事件的接收上實作 IWbemEventSink::SetSinkSecurity ,可針對通過的所有事件,在接收上設定安全性描述元 (SD) 。

    WMI 會根據 SD 執行存取檢查。 當提供者無法決定誰可以取用其事件,但可以決定特定接收的 SD 時,請使用此模式。 例如,如果您的事件提供者透過呼叫IWbemEventSink::GetRestrictedSink::GetRestrictedSink取得數個接收,而且您想要每個接收的安全描述項,請使用IWbemEventSink::SetSinkSecurity

  • 設定事件的 SECURITY_DESCRIPTOR 屬性,允許針對每個事件設定 SD。

    當傳遞至接收的每個事件可以有不同的安全性描述元時,請使用此方法。 若要使用此方法,請從 提供者從__Event__ExtrinsicEvent 衍生提供者所定義的任何 extrinsic 事件類別,讓您的類別包含 SECURITY_DESCRIPTOR 屬性。 例如,事件提供者可以透過接收發布安全與一般事件。 在此情況下,針對安全事件使用 Administrators 帳戶安全性描述項,並針對任何人都可以接收的一般事件使用 Null 安全性描述元。

透過分離的事件提供者保護事件

分離的事件提供者與非重複的事件提供者不同,因為它們向 WMI 註冊的方式。 從分離提供者的事件呼叫 IWbemEventProviderSecurity::AccessCheck 永遠不會傳播用戶端存取權杖。 WMI 會以與非編碼事件提供者相同的方式處理存取控制。 如需撰寫分離提供者的詳細資訊,請參閱 在應用程式中併入提供者

只有主控台WMI 控制項中設定FULL_WRITE許可權的系統管理員,才能引發命名空間的事件。 如需詳細資訊,請參閱 使用 WMI 控制項設定命名空間安全性

保護 WMI 事件