Dela via


Tillhandahålla data till WMI

WMI gör data om hanterbara Windows-objekt tillgängliga via WMI -leverantörer. En provider hämtar data från en systemkomponent, till exempel en process eller ett instrumenterat program, till exempel SNMP eller IIS, och skickar dessa data via WMI till ett hanteringsprogram. När till exempel ett program eller skriptbegäranden bearbetar information med hjälp av klassen WMI Win32_Process hämtas data dynamiskt via en förinstallerad provider.

Följande avsnitt beskrivs i det här avsnittet:

Skapa en modell för ett hanterbart objekt

Innan du utvecklar en provider skapar du en datamodell som representerar det hanterbara objekt som ska exponeras via WMI. Du planerar vilka dataobjekt som leverantören ska exponera. Om du till exempel planerar att hantera skärmupplösningen för skrivbordsbakgrunden måste du bestämma hur skrivbordet ska modelleras i en MOF-fil (Managed Object Format) fil.

Så här skapar du en användbar modell:

  • Fastställ verkliga scenarier och modellera den information som en kund kanske vill läsa och uppdatera (till exempel ändra bakgrundsbilden) för varje hanterbart objekt. Det här är dina klassegenskaper.
  • Ta reda på vilken typ av åtgärder en kund vill utföra med varje hanterbart objekt. Det här är dina metoder.

Implementera en modell för ett hanterbart objekt

Om du vill implementera en modell för hanterbara objekt skapar du en MOF-fil som innehåller en WMI-klass som representerar varje objekt. Mer information om hur du skapar en MOF-fil för att definiera WMI-klasser finns i Utforma MOF-klasser (Managed Object Format). Registreringen av providern och dess klasser ingår vanligtvis i MOF-filen, även om det är möjligt att använda COM API- för att skapa klasser och metoder. Mer information finns i Utveckla en WMI-provider.

Note

För att säkerställa att alla WMI-klassdefinitioner för hanterade objekt återställs till WMI-lagringsplats om WMI har ett fel och startar om, använder du #pragma automatisk återställning förprocessorinstruktion i din MOF- fil.

 

När du har skapat MOF-filen kompilerar du den med hjälp av verktyget Mofcomp.exe. Detta meddelar dig om fel i MOF-filen och lägger till den WMI-klass som definierats i MOF-filen till WMI-lagringsplats så att klassen kan användas av en provider.

Fastställa en providertyp som ska implementeras

WMI stöder ett visst antal leverantörstyper som avgör vilken typ av information som levereras och vilka åtgärder som stöds av leverantörerna.

Providertyperna är:

De allra flesta leverantörer är instansprovidrar och metodleverantörer. En instansprovider är den vanligaste providern och tillhandahåller instanserna av en viss klass. En metodprovider implementerar metoderna för en eller flera klasser. Mer information om typer av leverantörer finns i Utveckla en WMI-provider.

Fastställa en värdmodell (implementering) för en provider

WMI-providers är binärfiler som implementeras som COM-objekt. Det innebär att varje provider har en DLL-fil som kan köras inom en specifik process- och säkerhetskontext. Det här är vad WMI refererar till som värdmodell. WMI erbjuder olika sätt att vara värd för leverantörer, men den vanligaste metoden är att använda den kopplade providermodellen (som körs under WMI-processen) i säkerhetskontexten NetworkServiceHost. En WMI-leverantör kan klassificeras som antingen kopplad eller frikopplad.

Termen kopplad eller frikopplad leverantör avgör under vilken värdprocess leverantören körs i förhållande till den WMI-process som tillhandahålls av WMIPRVSE.EXE. Bästa praxis är att avgöra om de hanteringsdata som providern exponerar och det API eller program som den förlitar sig på alltid är tillgängliga i systemet eller inte. Om api:et eller programmet som providern förlitar sig på alltid är tillgängligt (körs på systemet) bör providern vara en kopplad provider, om inte, måste den vara en frikopplad provider. Mer information om värdmodeller finns i Provider Hosting and Security.

Mer information om hur du skapar en kopplad provider finns i Att tillhandahålla data till WMI genom att skriva en provideroch information om hur du införlivar en frikopplad provider i ett program finns i Införliva en provider i ett program.

Kopplade leverantörer kan beskrivas som in-process (in-proc) eller out-of-process (out-of-proc). När en kopplad provider är en in-proc-provider körs den under en delad WMIPRVSE.EXE WMI-värdprocess och implementeras som en COM-in-proc-server (.dll). När en provider är en out-of-proc-provider startas den av WMI på begäran av en klient eller händelse, men den körs som en avgränsad process och implementeras som en körbar (.exe).

Implementera en leverantör

En leverantör kan implementeras på följande sätt:

  • Använda ATL-guiden i Visual Studio.

    ATL-guiden genererar leverantörskod som implementerar en kopplad leverantör. När du använder ATL-guiden kan du ange att du vill skapa en in-proc (.dll) eller out-of-proc (.exe) leverantörskörningsmodell.

  • Definiera ett COM-objekt som ska innehålla din provider.

    Providerkoden är skriven i C++. För mer information, se Att tillhandahålla data till WMI genom att skriva en leverantör.

  • Använda klasserna i Microsoft.Management.Infrastructure namnområde i .NET Framework för att skapa en provider med hjälp av hanterad kod. (Namnområdet System.Management.Instrumentation stöds inte längre.)

    Den här processen skapar en frikopplad provider.

Registrera en provider med WMI och systemet

Innan du använder tjänsteleverantören för konsumentbruk är det viktigt att registrera den med WMI-systemet och Windows COM-delsystemet.

En MOF-fil kan innehålla flera typer av providers för samma klasser. Samma providernamn är registrerat som till exempel en instans eller en metodprovider. Mer information finns i Registrering av en leverantör.

Testa leverantör

När leverantörskoden har registrerats är det viktigt att korrekt testa leverantören genom att använda den från olika konsumenter, såsom skript, .NET-hanterad kod och C++-konsumenter.

Utför följande uppgifter för att testa providern:

  • Kontrollera att din provider laddas korrekt genom att spåra MSFT_WmiProvider_OperationEvent händelsenotifikationer. Dessa händelser informerar dig om eventuella providerbelastningsfel. Andra felsökningsklasser som kan vara till hjälp är Win32_ProcessStartTrace och Win32_ProcessStopTrace. Mer information om felsökningsprovidrar finns i Felsökningsprovidrar och providerkonfiguration och felsökningsklasser.
  • Om providern är en instans eller metodprovider kontrollerar du att du testar varje providerfunktion en i taget för att undvika förvirring i att följa kodlogik.
  • För en instansprovider skapar du ett klientprogram eller skript som anropar varje gränssnitt för providern (uppräkning, get, put och delete). Även om providern inte ska implementera något bör den returnera ett meddelande som inte stöds. Du kan hitta de returvärden som redan är definierade i WMI-returkoder.
  • För att säkerställa att den önskade säkerhetskontexten fungerar som planerat anropar du de åtgärder som stöds av providern från en icke-administratörssäkerhetskontext. Providern måste ha stöd för personifiering. Om en användare som saknar rätt säkerhetsautentiseringsuppgifter försöker uppdatera data eller utföra en åtgärd som kör en metod, bör leverantören neka åtkomst med lämpligt felmeddelande.
  • Mer information om providersäkerhet finns i Skydda din provider.

Utveckla en WMI-tjänstleverantör

Tjänsteleverantörens värdtjänst och säkerhet

Leverera data till WMI genom att skriva en leverantör

införliva en leverantör i en applikation

Registrera en leverantör

Felsökning av WMI-klientapplikationer

Skydda din provider

Hämta och tillhandahålla data på en 64-bitars plattform