Gegevens verstrekken aan WMI
WMI maakt gegevens over beheerbare Windows-objecten beschikbaar via WMI-providers. Een provider haalt gegevens op uit een systeemonderdeel, zoals een proces of een geïnstrumenteerde toepassing, zoals SNMP of IIS, en geeft die gegevens via WMI door aan een beheertoepassing. Wanneer een toepassing of script bijvoorbeeld gegevens verwerkt met behulp van de klasse WMI Win32_Process, worden de gegevens dynamisch verkregen via een vooraf geïnstalleerde provider.
In dit onderwerp worden de volgende secties besproken:
- Een model maken voor een beheerbaar object
- een model implementeren voor een beheerbaar object
- een providertype bepalen om te implementeren
- het bepalen van een hostingmodel (implementatie) voor een provider
- een provider implementeren
- een provider registreren bij WMI en het systeem
- een provider testen
- Verwante onderwerpen
Een model maken voor een beheerbaar object
Voordat u een provider ontwikkelt, maakt u een gegevensmodel om het beheerbare object weer te geven dat moet worden weergegeven via WMI. U plant welke gegevensobjecten uw provider beschikbaar maakt. Als u bijvoorbeeld de schermresolutie van de bureaubladachtergrond wilt beheren, moet u beslissen hoe u het bureaublad modelleren in een MOF-bestand (Managed Object Format).
Een nuttig model maken:
- Bepaal praktijkscenario's en modelleer de informatie die een klant mogelijk wil lezen en bijwerken (bijvoorbeeld het wijzigen van de achtergrondafbeelding) voor elk beheerbaar object. Dit zijn uw klassenkenmerken.
- Bepaal welk type acties een klant kan uitvoeren met elk beheerbaar object. Dit zijn uw methoden.
Een model implementeren voor een beheerbaar object
Als u een model voor beheerbare objecten wilt implementeren, maakt u een MOF-bestand met een WMI-klasse die elk object vertegenwoordigt. Voor meer informatie over het maken van een MOF-bestand om WMI-klassen te definiëren, zie MOF-klassen (Managed Object Format) ontwerpen. De registratie van de provider en de bijbehorende klassen wordt meestal opgenomen in het MOF-bestand, hoewel het mogelijk is om de COM API- te gebruiken om klassen en methoden te maken. Zie Een WMI-provider ontwikkelenvoor meer informatie.
Notitie
Als u ervoor wilt zorgen dat alle WMI-klassedefinities voor beheerde objecten worden hersteld naar de WMI-opslagplaats als WMI een fout heeft en opnieuw wordt opgestart, gebruikt u de #pragma autoherstel-instructie preprocessorinstructie in uw MOF-bestand (Managed Object Format) bestand.
Nadat u het MOF-bestand hebt gemaakt, compileert u het met behulp van het hulpprogramma Mofcomp.exe. Hiermee wordt u op de hoogte gebracht van fouten in uw MOF-bestand en wordt de WMI-klasse die in het MOF-bestand is gedefinieerd, toegevoegd aan de WMI-opslagplaats, zodat de klasse kan worden gebruikt door een provider.
Een providertype bepalen dat moet worden geïmplementeerd
WMI ondersteunt een bepaald aantal providertypen, waarmee de aard van de door de providers geleverde gegevens en bewerkingen wordt bepaald.
De providertypen zijn:
- instantieleverancier
- methodenaanbieder
- eigendomsprovider
- Klasseaanbieder
- evenementenaanbieder
- Event consumer provider
- koppelingsprovider
De overgrote meerderheid van providers zijn instantieproviders en methodeproviders. Een instantieprovider is de meest voorkomende provider en levert de exemplaren van een bepaalde klasse. Een methodeprovider implementeert de methoden van een of meer klassen. Zie Een WMI-provider ontwikkelenvoor meer informatie over de typen providers.
Een hostingmodel (implementatie) voor een provider bepalen
WMI-providers zijn binaire bestanden die zijn geïmplementeerd als COM-objecten. Dit betekent dat elke provider een DLL-bestand heeft dat kan worden uitgevoerd binnen een specifieke proces- en beveiligingscontext. Dit is wat WMI verwijst naar het hostingmodel. WMI biedt verschillende manieren om providers te hosten, maar de meest voorkomende benadering is het gebruik van het gekoppelde providermodel (uitgevoerd onder het WMI-proces) in de netwerkservicehost-beveiligingscontext. Een WMI-provider kan worden geclassificeerd als gekoppeld of losgekoppeld.
De term gekoppelde of ontkoppelde provider bepaalt onder welk hostproces de provider wordt uitgevoerd met betrekking tot het WMI geleverd WMIPRVSE.EXE proces. Een best practice is om te bepalen of de beheergegevens die door de provider worden weergegeven en de API of toepassing die ervan afhankelijk is, altijd beschikbaar zijn in het systeem of niet. Als de API of toepassing waarop de provider afhankelijk is altijd beschikbaar is (uitgevoerd op het systeem), moet de provider een gekoppelde provider zijn, als dat niet het geval is, moet deze een losgekoppelde provider zijn. Zie Provider Hosting and Securityvoor meer informatie over hostingmodellen.
Zie voor meer informatie over het maken van een gekoppelde provider Leveren van gegevens aan WMI door een provider te schrijvenen zie Een provider opnemen in een toepassingvoor meer informatie over het opnemen van een gekoppelde provider in een toepassing.
Gekoppelde providers kunnen worden beschreven als in-process (in-proc) of out-of-process (out-of-proc). Wanneer een gekoppelde provider een in-proc-provider is, wordt deze uitgevoerd onder een gedeeld WMIPRVSE.EXE WMI-hostingproces en wordt deze geïmplementeerd als een COM in-proc-server (.dll). Wanneer een provider een out-of-proc-provider is, wordt deze op verzoek van een client of gebeurtenis gestart door WMI, maar wordt deze uitgevoerd als een gescheiden proces en wordt geïmplementeerd als een uitvoerbaar bestand (.exe).
Een provider implementeren
Een provider kan op de volgende manieren worden geïmplementeerd:
De ATL-wizard in Visual Studio gebruiken.
De ATL-wizard genereert providercode waarmee een gekoppelde provider wordt geïmplementeerd. Tijdens het gebruik van de ATL-wizard kunt u opgeven dat u een in-proc (.dll) of out-of-proc (.exe) provider-runtime-omgeving wilt maken.
Een COM-object definiëren dat uw provider bevat.
De providercode is geschreven in C++. Zie Gegevens leveren aan WMI door een provider te schrijvenvoor meer informatie.
Gebruik de klassen in de Microsoft.Management.Infrastructure naamruimte in .NET Framework om een provider te maken met beheerde code. (De System.Management.Instrumentation naamruimte wordt niet meer ondersteund.)
Met dit proces maakt u een losgekoppelde provider.
Een provider registreren bij WMI en het systeem
Voordat u de provider van een consument gebruikt, is het belangrijk om deze te registreren bij het WMI-systeem en het Windows COM-subsysteem.
Een MOF-bestand kan meerdere typen providers voor dezelfde klassen bevatten. Dezelfde naam van de provider wordt geregistreerd als bijvoorbeeld een instantie of een provider van methodes. Zie Een provider registrerenvoor meer informatie.
Een provider testen
Wanneer de providercode is geregistreerd, is het belangrijk om de provider goed te testen met behulp van de provider van verschillende consumenten (bijvoorbeeld scripts, beheerde .NET-code en C++-consumenten).
Voer de volgende taken uit om uw provider te testen:
- Zorg ervoor dat uw provider correct wordt geladen door de MSFT_WmiProvider_OperationEvent gebeurtenismeldingen bij te houden. Deze gebeurtenissen informeren u over eventuele laadfouten van providers. Andere probleemoplossingsklassen die nuttig kunnen zijn, zijn Win32_ProcessStartTrace en Win32_ProcessStopTrace. Zie Foutopsporingsproviders en providerconfiguratie en probleemoplossingsklassenvoor meer informatie over probleemoplossingsproviders.
- Als de provider een instantie of methodeprovider is, moet u ervoor zorgen dat u elke providerfunctie één voor één test om verwarring te voorkomen bij het volgen van uw codelogica.
- Voor een instantieprovider maakt u een clienttoepassing of script dat elke interface van de provider aanroept (opsomming, ophalen, plaatsen en verwijderen). Zelfs als de provider niets mag implementeren, moet het een bericht 'niet ondersteund' retourneren. U vindt de retourwaarden die al zijn gedefinieerd in WMI-retourcodes.
- Om ervoor te zorgen dat de gewenste beveiligingscontext werkt zoals gepland, roept u de provider ondersteunde bewerkingen aan vanuit een niet-beheerdersbeveiligingscontext. De provider moet imitatie ondersteunen. Als een gebruiker zonder de juiste beveiligingsreferenties probeert gegevens bij te werken of een bewerking uitvoert waarmee een methode wordt uitgevoerd, moet uw provider de toegang weigeren met het juiste foutbericht.
- Zie Uw provider beveiligenvoor meer informatie over providerbeveiliging.
Verwante onderwerpen