Tworzenie dostawcy zdarzeń
Dostawca zdarzeń jest obiektem COM, który zapewnia WMI powiadomienia o zdarzeniach wewnętrznych i zewnętrznych. Zdarzenie wewnętrzne zgłasza wewnętrzną zmianę danych w usłudze WMI, podczas gdy zdarzenie zewnętrzne zgłasza zdarzenie zdefiniowane przez użytkownika, które nie zostało opisane przez zdarzenie wewnętrzne. Na przykład zdarzenie w odpowiedzi na zmiany, utworzenie lub usunięcie klasy Win32_LogicalDisk będzie klasą wewnętrzną. Zdarzenie, które jest generowane na podstawie czegoś innego niż modyfikacja, tworzenie lub usuwanie istniejącego obiektu WMI, to zdarzenie zewnętrzne. Niezależnie od obsługiwanej klasy można zaimplementować wszystkich dostawców zdarzeń w ten sam sposób.
Poniższa procedura opisuje sposób implementacji dostawcy zdarzeń.
Aby zaimplementować dostawcę zdarzeń
Zaprojektuj i zarejestruj dostawcę klas w WMI.
Dostawcy klas rejestrują się w usłudze WMI, poprzez tworzenie wystąpienia __Win32Provider oraz klasy __EventProviderRegistration. Aby uzyskać więcej informacji, zobacz Rejestracja dostawcy zdarzeń.
Zaimplementuj interfejs dostawcy IWbemProviderInit.
Interfejs IWbemProviderInit jest typowym interfejsem używanym przez usługę WMI do ładowania i inicjowania wszystkich dostawców. Aby uzyskać więcej informacji, zobacz Inicjowanie usługodawcy.
Zaimplementuj IWbemEventProvider jako podstawowy interfejs dostawcy.
Interfejs IWbemEventProvider używa metody ProviderEvents do dostarczania zdarzeń do usługi WMI. Aby uzyskać więcej informacji, zobacz Wdrażanie interfejsu podstawowego dla dostawcy zdarzeń.
Uwaga
Dostawcy zdarzeń muszą używać modelu wielowątkowości "Both".
Opcjonalnie możesz zaimplementować także interfejs IWbemEventProviderQuerySink, aby zwiększyć wydajność swojego dostawcy zdarzeń.
Interfejs IWbemEventProviderQuerySink umożliwia dostawcy optymalizowanie zapytań przed wysłaniem odpowiedzi na usługę WMI i jest najbardziej przydatne dla dostawcy, który dostarcza zdarzenia wielu typów i musi wykonać jak najwięcej optymalizacji wewnętrznych, jak to możliwe. Aby uzyskać więcej informacji, zobacz Optymalizowanie dostawcy zdarzeń.
Zaimplementuj interfejs IWbemEventProviderSecurity, aby ograniczyć użytkowników do niektórych identyfikatorów zabezpieczeń (SID) lub zaimplementować IWbemEventSink::SetSinkSecurity w celu zabezpieczenia samego ujścia. Dostawca może również ustawić właściwość SECURITY_DESCRIPTOR w klasie zdarzeń, aby zabezpieczyć poszczególne zdarzenia w kodzie MOF. Aby uzyskać więcej informacji, zobacz Zabezpieczanie zdarzeń WMI.
Dodaj dodatkowy kod niezbędny dla dostawcy.
Podczas projektowania dostawcy najprawdopodobniej trzeba wywołać interfejsy WMI. Aby uzyskać więcej informacji, zobacz Wywoływanie metody.
Podczas pobierania informacji dla klienta może być konieczne uzyskanie dostępu do poziomów zabezpieczeń dla tego klienta. Aby uzyskać więcej informacji, zobacz Personifikacja klienta.
Zastąp istniejącego dostawcę nowym kodem.
Nie musisz wykonywać tego kroku, jeśli nie masz wcześniej istniejącego dostawcy do skopiowania. Aby uzyskać więcej informacji, zobacz sekcję Aktualizowanie dostawcy.
Aplikacja kliencka może zażądać zdarzenia, rejestrując się w usłudze WMI jako odbiorca zdarzeń. Aby uzyskać więcej informacji, zobacz Odbieranie zdarzenia WMI.