Proporcionar eventos de forma segura

Puede impedir que los usuarios no autorizados reciban eventos a los que no deben tener acceso. El proveedor de eventos puede proporcionar instancias de sus propias clases de eventos, al igual que el proveedor del Registro del sistema proporciona clases como RegistryKeyChangeEvent. El proveedor de eventos también puede entregar eventos intrínsecos como __InstanceCreationEvent. Para obtener más información, consulte Escribir un proveedor de eventos.

Un proveedor de eventos puede controlar el acceso a los destinatarios de eventos de las siguientes maneras:

  • El uso del control de acceso mediante la implementación de IWbemEventProviderSecurity::AccessCheck es la manera más eficaz.

    El proveedor determina si el consumidor tiene privilegios para recibir un evento solicitado. Si el consumidor carece de privilegios suficientes para registrarse, WMI devuelve un error de acceso denegado. Use este modo cuando el proveedor pueda tomar la decisión sobre quién puede recibir eventos. Por ejemplo, un proveedor puede proporcionar eventos relacionados con la seguridad y puede requerir que el consumidor tenga privilegios de administrador con el privilegio SeSecurityPrivilege habilitado.

  • La implementación de IWbemEventSink::SetSinkSecurity en el receptor usado para generar eventos permite establecer un descriptor de seguridad (SD) en un receptor para todos los eventos que pasan.

    WMI realiza comprobaciones de acceso basadas en SD. Use este modo cuando el proveedor no pueda tomar la decisión sobre quién puede consumir sus eventos, pero puede decidir un SD para un receptor específico. Por ejemplo, use IWbemEventSink::SetSinkSecurity si el proveedor de eventos obtuvo varios receptores mediante llamadas a IWbemEventSink::GetRestrictedSink y desea un descriptor de seguridad para cada receptor.

  • Establecer la propiedad SECURITY_DESCRIPTOR de un evento permite establecer un SD para cada evento.

    Use este enfoque cuando cada evento entregado al receptor pueda tener distintos descriptores de seguridad. Para usar este enfoque, derive cualquiera de las clases de eventos extrinsic definidas por el proveedor de __Event o __ExtrinsicEvent para que la clase contenga la propiedad SECURITY_DESCRIPTOR. Por ejemplo, el proveedor de eventos puede publicar eventos seguros y normales a través de un receptor. En este caso, use el descriptor de seguridad de la cuenta administradores para eventos seguros y un descriptor de seguridad NULL para eventos normales que cualquier persona pueda recibir.

Proteger eventos por proveedores de eventos desacoplados

Los proveedores de eventos desacoplados difieren de los proveedores de eventos no desacoplados de la manera en que se registran con WMI. La llamada a IWbemEventProviderSecurity::AccessCheck para eventos de un proveedor desacoplado nunca propaga el token de acceso de cliente. WMI controla el control de acceso de la misma manera que para los proveedores de eventos no desacoplados. Para obtener más información sobre cómo escribir un proveedor desacoplado, consulte Incorporar un proveedor en una aplicación.

Solo los administradores con el privilegio FULL_WRITE establecido en el control WMI del Panel de control pueden generar eventos para un espacio de nombres. Para obtener más información, vea Establecer la seguridad del espacio de nombres con el control WMI.

Protección de eventos de WMI