Share via


Sichere Bereitstellung von Ereignissen

Sie können verhindern, dass nicht autorisierte Benutzer Ereignisse empfangen, auf die sie keinen Zugriff haben sollten. Ihr Ereignisanbieter kann Instanzen eigener Ereignisklassen bereitstellen, genau wie der Systemregistrierungsanbieter Klassen wie RegistryKeyChangeEvent bereitstellt. Ihr Ereignisanbieter kann auch systeminterne Ereignisse wie __InstanceCreationEvent bereitstellen. Weitere Informationen finden Sie unter Schreiben eines Ereignisanbieters.

Ein Ereignisanbieter kann den Zugriff auf Ereignisempfänger auf folgende Weise steuern:

  • Die Verwendung der Zugriffssteuerung durch die Implementierung von IWbemEventProviderSecurity::AccessCheck ist die effizienteste Methode.

    Der Anbieter bestimmt, ob der Consumer über Berechtigungen zum Empfangen eines angeforderten Ereignisses verfügt. Wenn der Consumer nicht über ausreichende Berechtigungen für die Registrierung verfügt, gibt WMI einen Fehler vom Typ „Zugriff verweigert“ zurück. Verwenden Sie diesen Modus, wenn der Anbieter die Entscheidung treffen kann, wer Ereignisse empfangen kann. Beispielsweise kann ein Anbieter sicherheitsbezogene Ereignisse bereitstellen und verlangen, dass der Consumer über Administratorrechte mit aktiviertem SeSecurityPrivilege-Berechtigung verfügt.

  • Die Implementierung von IWbemEventSink::SetSinkSecurity auf der Senke, die zum Auslösen von Ereignissen verwendet wird, ermöglicht das Festlegen eines Sicherheitsdeskriptors (SD) auf einer Senke für alle Ereignisse, die durchlaufen werden.

    WMI führt Zugriffsprüfungen basierend auf dem SD durch. Verwenden Sie diesen Modus, wenn der Anbieter nicht die Entscheidung treffen kann, wer seine Ereignisse nutzen darf, sondern sich für einen SD für eine bestimmte Senke entscheiden kann. Verwenden Sie beispielsweise IWbemEventSink::SetSinkSecurity, wenn Ihr Ereignisanbieter mehrere Senken durch Aufrufe von IWbemEventSink::GetRestrictedSink abgerufen hat und Sie einen Sicherheitsdeskriptor für jede Senke benötigen.

  • Das Festlegen der SECURITY_DESCRIPTOR-Eigenschaft eines Ereignisses ermöglicht das Festlegen eines SD für jedes Ereignis.

    Verwenden Sie diesen Ansatz, wenn jedes an die Senke übermittelte Ereignis unterschiedliche Sicherheitsdeskriptoren aufweisen kann. Um diesen Ansatz zu verwenden, leiten Sie eine der von Ihrem Anbieter definierten extrinsischen Ereignisklassen von __Event oder __ExtrinsicEvent ab, sodass Ihre Klasse die SECURITY_DESCRIPTOR-Eigenschaft enthält. Beispielsweise kann Ihr Ereignisanbieter sowohl sichere als auch normale Ereignisse über eine Senke veröffentlichen. Verwenden Sie in diesem Fall den Sicherheitsdeskriptor „Administratorkonto“ für sichere Ereignisse und einen NULL-Sicherheitsdeskriptor für normale Ereignisse, die von jedem empfangen werden können.

Sichern von Ereignissen durch entkoppelte Ereignisanbieter

Entkoppelte Ereignisanbieter unterscheiden sich von nicht entkoppelten Ereignisanbietern in der Art und Weise, wie sie sich bei WMI registrieren. Der Aufruf von IWbemEventProviderSecurity::AccessCheck für Ereignisse eines entkoppelten Anbieters gibt das Clientzugriffstoken nie weiter. WMI behandelt die Zugriffssteuerung auf die gleiche Weise wie für nicht entkoppelte Ereignisanbieter. Weitere Informationen zum Schreiben eines entkoppelten Anbieters finden Sie unter Integrieren eines Anbieters in eine Anwendung.

Nur Administratoren mit der FULL_WRITE-Berechtigung, die im WMI-Steuerelement der Systemsteuerung festgelegt ist, dürfen Ereignisse für einen Namespace auslösen. Weitere Informationen finden Sie unter Festlegen der Namespacesicherheit mit dem WMI-Steuerelement.

Schützen von WMI-Ereignissen