Partager via


Fourniture d’événements en toute sécurité

Vous pouvez empêcher les utilisateurs non autorisés de recevoir des événements auxquels ils ne doivent pas avoir accès. Votre fournisseur d’événements peut fournir des instances de ses propres classes d’événements, tout comme le fournisseur de registre système fournit des classes telles que RegistryKeyChangeEvent. Votre fournisseur d’événements peut également fournir des événements intrinsèques tels que __InstanceCreationEvent. Pour plus d’informations, consultez Écriture d’un fournisseur d’événements.

Un fournisseur d’événements peut contrôler l’accès aux destinataires d’événements des manières suivantes :

  • L’utilisation du contrôle d’accès en implémentant IWbemEventProviderSecurity::AccessCheck est le moyen le plus efficace.

    Le fournisseur détermine si le consommateur dispose de privilèges pour recevoir un événement demandé. Si le consommateur ne dispose pas de privilèges suffisants pour s’inscrire, WMI retourne une erreur d’accès refusé. Utilisez ce mode lorsque le fournisseur peut décider qui peut recevoir des événements. Par exemple, un fournisseur peut fournir des événements liés à la sécurité et peut exiger que le consommateur dispose de privilèges d’administrateur avec le privilège SeSecurityPrivilege activé.

  • L’implémentation d’IWbemEventSink::SetSinkSecurity sur le récepteur utilisé pour déclencher des événements permet de définir un descripteur de sécurité (SD) sur un récepteur pour tous les événements en transit.

    WMI effectue des vérifications d’accès basées sur le SD. Utilisez ce mode lorsque le fournisseur ne peut pas décider qui est autorisé à consommer ses événements, mais peut décider d’un SD pour un récepteur spécifique. Par exemple, utilisez IWbemEventSink::SetSinkSecurity si votre fournisseur d’événements a obtenu plusieurs récepteurs en appelant IWbemEventSink::GetRestrictedSink et que vous souhaitez un descripteur de sécurité pour chaque récepteur.

  • La définition de la propriété SECURITY_DESCRIPTOR d’un événement permet de définir un SD pour chaque événement.

    Utilisez cette approche lorsque chaque événement remis au récepteur peut avoir des descripteurs de sécurité différents. Pour utiliser cette approche, dérivez l’une des classes d’événements extrinsèques définies par votre fournisseur à partir de __Event ou de __ExtrinsicEvent afin que votre classe contienne la propriété SECURITY_DESCRIPTOR . Par exemple, votre fournisseur d’événements peut publier des événements sécurisés et normaux via un récepteur. Dans ce cas, utilisez le descripteur de sécurité du compte Administrateurs pour les événements sécurisés et un descripteur de sécurité NULL pour les événements normaux qui peuvent être reçus par n’importe qui.

Sécurisation des événements par des fournisseurs d’événements découplés

Les fournisseurs d’événements découplés diffèrent des fournisseurs d’événements non découplés dans la façon dont ils s’inscrivent auprès de WMI. L’appel à IWbemEventProviderSecurity::AccessCheck pour les événements d’un fournisseur découplé ne propage jamais le jeton d’accès client. WMI gère le contrôle d’accès de la même manière que pour les fournisseurs d’événements non découplés. Pour plus d’informations sur l’écriture d’un fournisseur découplé, consultez Incorporation d’un fournisseur dans une application.

Seuls les administrateurs disposant du FULL_WRITE de privilèges définis dans le contrôle WMI du Panneau de configuration sont autorisés à déclencher des événements pour un espace de noms. Pour plus d’informations, consultez Définition de la sécurité des espaces de noms avec le contrôle WMI.

Sécurisation des événements WMI