Delen via


Gebeurtenissen op elk moment ontvangen

U kunt een toepassing schrijven die op elk gewenst moment op gebeurtenissen kan reageren. Een beheerder kan bijvoorbeeld een e-mailbericht ontvangen wanneer specifieke prestatiemetingen op netwerkservers afnemen. In dit geval moet uw toepassing altijd worden uitgevoerd. Het continu uitvoeren van een toepassing is echter geen efficiënt gebruik van systeembronnen. In plaats daarvan kunt u met WMI een permanente gebeurtenisconsumer maken. Consumenten van permanente evenementen moeten voldoen aan speciale veiligheidseisen. Voor meer informatie, zie WMI-gebeurtenissen beveiligen.

Een consument van een permanente gebeurtenis ontvangt gebeurtenissen totdat de registratie expliciet wordt geannuleerd.

Een permanente gebeurtenisconsumer is een combinatie van de volgende WMI-klassen, filters en COM-objecten die zich op uw systeem bevinden:

  • Een COM-object genaamd een fysieke consument. WMI levert verschillende standaard permanente consumenten. De gebruiker van de actieve script gebeurtenis bijvoorbeeld een script uitvoert wanneer een gebeurtenis zich voordoet.
  • Een nieuwe permanente consumentenklasse.
  • Een exemplaar van de permanente consumentenklasse die een logische consument wordt genoemd.
  • Een filter dat de query voor gebeurtenissen bevat.
  • Een koppeling tussen de consument en het filter.

De eigenschappen van een logische gebeurtenisgebruiker geven de acties op die moeten worden uitgevoerd wanneer er een melding van een gebeurtenis is, maar definiëren niet de gebeurtenisvragen waaraan ze zijn gekoppeld. Wanneer dit wordt aangegeven, laadt WMI automatisch het COM-object dat de permanente gebeurtenisconsumer vertegenwoordigt in het actieve geheugen. Dit gebeurt meestal tijdens het opstarten of als reactie op een activerende gebeurtenis. Nadat de permanente gebeurtenisgebruiker is geactiveerd, fungeert deze als een normale gebeurtenisconsumer, maar blijft deze behouden totdat deze specifiek door het besturingssysteem wordt verwijderd.

U kunt uw eigen permanente gebeurtenisconsument schrijven of de vooraf geïnstalleerde WMI Standard Consumer Classesgebruiken, zoals de ActiveScriptEventConsumer. Zie Standaard Consumenten Klassen, Gebeurtenissen bewaken en erop reageren met standaardconsumenten, en Gebeurtenissen bewakenvoor meer informatie.

In de volgende procedure wordt beschreven hoe u uw eigen permanente gebeurtenisconsumer maakt.

Maak uw eigen permanente evenementenconsumer

  1. Bepaal wat voor soort gebeurtenissen u wilt ontvangen.

    WMI ondersteunt intrinsieke en extrinsische gebeurtenissen. Een intrinsieke gebeurtenis is een gebeurtenis die vooraf is gedefinieerd door WMI, terwijl een extrinsische gebeurtenis een gebeurtenis is die is gedefinieerd door een externe provider. Zie Bepalen welk type gebeurtenis moet worden ontvangenvoor meer informatie.

  2. een fysieke consument implementeren.

    Het belangrijkste verschil tussen een beheertoepassing en een fysieke consument is dat een gebruiker een beheertoepassing laadt en verwijdert, terwijl WMI een fysieke consument laadt en verwijdert. De meeste coderingen moeten zich in de fysieke consument bevinden.

    Notitie

    Deze stap is eerst in de procedure om de uitleg te vergemakkelijken. Bij het coderen zou je eigenlijk de fysieke consument als laatste moeten creëren. Op die manier kunt u uw parameters en logica voor uw permanente gebeurtenisprovider opmaken voordat u begint met lange codering. Er is echter geen beperking op het prioriteren of eerst aanspreken van de fysieke consument.

     

  3. Een nieuwe consumentenklasse maken waarin de fysieke consumentwordt beschreven.

    Net als elke klasse beschrijft de consumentenklasse de algemene parameters van een permanente evenementenconsument voor WMI.

  4. Een exemplaar van de consumentenklasse maken.

    Net als elke andere WMI-klasse moet u een exemplaar van de consumentenklasse maken als u de klasse wilt implementeren. Een exemplaar van een consumentenklasse wordt ook wel een logische consumentgenoemd. De logische consument vertegenwoordigt de fysieke consument voor WMI.

  5. Een gebeurtenisfilter maken.

    De gebeurtenisquery's die blijvende gebeurtenisgebruikers activeren, worden gebeurtenisfiltersgenoemd. Eén gebeurtenisfilter kan worden gekoppeld aan meerdere logische gebeurtenisgebruikers. Bovendien kunnen meerdere gebeurtenisfilters worden gekoppeld aan één logische gebeurtenisconsumer. Het filter is een exemplaar van __EventFilter.

    Er wordt een NT-logboek gebeurtenis gegenereerd wanneer de query van een permanente gebeurtenisgebruiker mislukt. De bron van de gebeurtenis is WinMgmt, de gebeurtenis-id is 10 en het gebeurtenistype is Fout.

  6. het gebeurtenisfilter koppelen aan de logische consument.

    Door het gebeurtenisfilter te koppelen aan de logische consument, geeft u WMI opdracht over welk gebeurtenisfilter deel uitmaakt van welke logische consument. Logische gebeurtenisgebruikers en gebeurtenisfilters worden verbonden door een associatieklasse-instantie van __FilterToConsumerBinding. Wanneer een gebeurtenis wordt ontvangen die overeenkomt met een gebeurtenisquery die wordt beschreven in een gebeurtenisfilter, vindt WMI de bijbehorende logische gebeurtenisconsumer door naar het exemplaar van de koppelingsklasse te kijken. Nadat het logische gebeurtenisconsument-exemplaar is gelokaliseerd, gebruikt WMI een instantie van de __EventConsumerProviderRegistration klasse om de fysieke gebeurtenisconsument te lokaliseren en uit te voeren die verbonden is met dit exemplaar.

  7. Een gebeurtenisafnemer-provider schrijven.

    De gebeurtenisconsumerprovider is een COM-object dat de fysieke consument voor WMI zoekt.