De primaire interface voor een klasseprovider implementeren
Er zijn twee manieren om een klasseprovider te implementeren: de interface implementeren als pushprovider of als pull-provider.
In dit onderwerp worden de volgende secties besproken:
- De primaire interface voor een pushklasse-provider implementeren
- de primaire interface voor een pull-klasseprovider implementeren
De primaire interface voor een pushklasseprovider implementeren
Terwijl alle providers IWbemProviderInit- implementeren voor initialisatie en ten minste één andere interface als primaire interface, implementeert een pushprovider alleen IWbemProviderInit.
Zorg ervoor dat uw implementatie de volgende taken uitvoert:
- Haalt de juiste klassegegevens op.
- Plaatst de gegevens in de WMI-opslagplaats.
- Hiermee verwijdert u verouderde gegevens.
Nadat het initialisatieproces is voltooid, verwerkt WMI alle toepassingsaanvragen voor klassen die behoren tot de pushprovider zonder verdere tussenkomst van de provider. Daarna fungeert de pushprovider effectief als een client van WMI in plaats van een provider. Zie Initialiseren van een providervoor meer informatie over het implementeren van IWbemProviderInit.
Notitie
Wanneer u WMI aanroept om gegevens in een pushprovider te maken, bij te werken of te verwijderen, stelt u de parameter lFlags in om de vlag WBEM_FLAG_OWNER_UPDATE op te nemen in alle aanroepen naar IWbemServices methoden.
De primaire interface voor een pull-klasseprovider implementeren
Een pull-provider voor klassen moet IWbemServices- implementeren als de primaire interface. De IWbemServices interface ondersteunt het ophalen van gegevens, het bijwerken van gegevens, het verwijderen van gegevens, opsomming en het verwerken van query's. Omdat IWbemServices echter ook door toepassingen en providers wordt gebruikt om services van WMI aan te vragen, bevat IWbemServices veel methoden die niet relevant zijn voor een klasseprovider. Uw implementatie moet ondersteuning bieden voor het ophalen en inventariseren van klassen via respectievelijk de GetObjectAsync- en CreateClassEnumAsync methoden. De volgende tabel bevat de aanvullende asynchrone IWbemServices methoden die u voor een klasseprovider kunt implementeren.
Methode | Kenmerk |
---|---|
PutInstanceAsync | Wijziging |
DeleteClassAsync | Verwijdering |
Notitie
Omdat de callback naar de sink mogelijk niet op hetzelfde verificatieniveau wordt geretourneerd als de client vereist, raden we aan semisynchrone communicatie te gebruiken in plaats van asynchrone communicatie. Zie Een methode aanroepenvoor meer informatie.
Uw klasseprovider moet een stub-implementatie leveren die WBEM_E_PROVIDER_NOT_CAPABLE retourneert voor alle andere IWbemServices methoden die uw functieset niet ondersteunen. WMI biedt geen ondersteuning voor queryverwerking voor klasseproviders. Als zodanig moet een klasseprovider WBEM_E_PROVIDER_NOT_CAPABLE retourneren vanuit hun implementatie van IWbemServices::ExecQueryAsync, de bijbehorende QuerySupportLevels registratie-eigenschap instellen op NULL, of beide.
De interfaces die door een klasseprovider worden geïmplementeerd, zijn vergelijkbaar met de interfaces voor een instantieprovider en een methodeprovider. In feite kan één provider fungeren als alle drie de typen providers door alle methoden te implementeren en correct te registreren.