Hosting en beveiliging van provider
De eigenschap HostingModel in het __Win32Provider exemplaar dat uw provider vertegenwoordigt, geeft het hostingmodel van de provider op. Als u deze eigenschap instelt, wordt de provider geladen in een gedeeld hostproces met een opgegeven bevoegdheidsniveau.
Hostproces voor gedeelde providers
WMI bevindt zich in een gedeelde servicehost met verschillende andere services. Om te voorkomen dat alle services worden gestopt wanneer een provider uitvalt, worden providers in een afzonderlijk hostproces geladen met de naam 'Wmiprvse.exe'. Er kan meer dan één proces met deze naam worden uitgevoerd. Elk account kan worden uitgevoerd onder een ander account met verschillende beveiliging. Houd er rekening mee dat u vanaf Windows Vista de opdracht winmgmt gebruikt om WMI in een afzonderlijk proces zelf uit te voeren met behulp van een vaste poort. Zie Verbinding maken met WMI op afstand vanaf Vistavoor meer informatie.
De gedeelde host kan worden uitgevoerd onder een van de volgende systeemaccounts in een Wmiprvse.exe hostproces:
Een provider kan ook een lokale COM-server (.exe) zijn of zelf-hosten, waarvoor geen WMI-providerhost is vereist.
Het hostingmodel instellen
Omdat LocalSystem een bevoegd account is, is het raadzaam dat u HostingModel- instelt op NetworkServiceHost- wanneer een provider wordt uitgevoerd in een Wmiprvse.exe proces. NetworkServiceHost-account is bedoeld voor services waarvoor geen uitgebreide bevoegdheden zijn vereist, maar die wel op afstand moeten communiceren met andere systemen.
Als u geen waarde instelt voor de eigenschap HostingModel, wordt door WMI een standaardwaarde van NetworkServiceHostOrSelfHostingesteld. Als de waarde HostingModel is ingesteld op LocalSystemHost, gebruikt WMI tracering om gebeurtenissen 5603 en 5604 te genereren in het Windows-gebeurtenislogboek. Omdat het lokale LocalSystem-account zeer bevoegd is, wordt deze instelling niet aanbevolen. U kunt deze gebeurtenissen bekijken in de Logboeken. Zie WMI-activiteit tracerenvoor meer informatie.
Stel de eigenschap HostingModel in voor losgekoppelde providers als 'Ontkoppeld:Com'. Providers die zijn gemaakt door instrumentatieklassen toe te voegen van Microsoft.Management.Infrastructure in .NET Framework zijn ontkoppelde providers. (System.Management.Instrumentation wordt niet meer ondersteund.) Zie Een provider opnemen in een toepassings-voor meer informatie over het maken van een losgekoppelde provider.
Het hostingmodel wordt opgegeven in de eigenschap HostingModel in het __Win32Provider exemplaar dat uw provider vertegenwoordigt.
Het hostingmodel voor een provider instellen
Maak in het MOF-bestand dat uw provider definieert een exemplaar van __Win32Provider.
Wijs een naam toe aan de provider in de eigenschap Name en wijs de klasse-id (CLSID) van het PROVIDER COM-object toe aan de eigenschap Clsid.
In het volgende codevoorbeeld wordt een naam toegewezen aan de eigenschap Name en de CSLID van het COM-object van de provider aan de eigenschap Clsid.
Instance of __Win32Provider as $NewProvider { Name = "MyProvider"; Clsid = "{.......}"; }
Wijs de juiste gedeelde hostwaarde toe aan de eigenschap HostingModel. Gedeelde hostwaarden, zoals NetworkServiceHost, worden gedefinieerd in de eigenschap HostingSpecification van MSFT_Providers klasse.
In het volgende codevoorbeeld wordt een gedeelde hostwaarde toegewezen aan de eigenschap HostingModel.
HostingModel = "NetworkServiceHost";
In het volgende codevoorbeeld ziet u hoe u een provider registreert in NetworkServiceHost.
Instance of __Win32Provider as $NewProvider
{
Name = "MyProvider";
Clsid = "{.......}";
HostingModel = "NetworkServiceHost";
}
Als u meerdere providers hebt, kunt u deze groeperen in een specifieke servicehost door uw provider te registreren zodat deze zich in het specifieke exemplaar bevindt.
In het volgende codevoorbeeld wordt ook een provider geregistreerd in NetworkServiceHost. De MSFT_Providers-klasse definieert waarden voor de twee waarden die worden gecombineerd om de eigenschap __Win32ProviderHostingModel te maken. In het voorbeeld is de waarde NetworkServiceHost afkomstig van de eigenschap HostingSpecification van MSFT_Providers en LocalServiceHost is afkomstig van de eigenschap HostingGroup.
Instance of __Win32Provider as $NewProvider
{
Name = "MyProvider";
Clsid = "{.......}";
HostingModel = "NetworkServiceHost:MySharedHost";
}
Er zijn speciale ontwikkelingsproblemen voor providers die niet zijn losgekoppeld en die worden gehost in het Wmiprvse-proces. Zie Providers voor foutopsporingvoor meer informatie.
Als u een provider schrijft die eigenschaps- of klasseproviderregistratie bevat, werken niet alle threadingmodellen. Zie Juiste registratie kiezenvoor meer informatie.
HostingModel-waarden voor In-Process-providers
De volgende lijst bevat de hostmodelwaarden van de provider die moeten worden gebruikt in het __Win32Provider exemplaar voor providers die worden uitgevoerd in een Wmiprvse.exe proces.
Waarde in __Win32Provider.HostingModel- | Beschrijving |
---|---|
SelfHost- | De provider gaat de implementatie van de lokale server gebruiken in plaats van in het proces. De beveiligingscontext van het proces waarin de provider wordt uitgevoerd, bepaalt de beveiligingscontext van de provider. |
LocalSystemHost- | De provider, indien geïmplementeerd als in-process, wordt geladen in een gedeelde providerhost die wordt uitgevoerd onder LocalSystem context. Vanaf Windows Vista is LocalSystemHost niet langer het standaardhostingmodel als de HostingModel- van een WMI-provider (__Win32Provider.HostingModel eigenschap) niet is opgegeven. Zie Beveiliging van hostingmodellenvoor meer informatie. |
LocalSystemHostOrSelfHost | De provider wordt zelf-hostend of geladen in het Wmiprvse.exe proces dat wordt uitgevoerd onder het LocalSystem-account. Omdat LocalSystem een account met hoge bevoegdheden is, wordt er een vermelding gegenereerd in het gebeurtenislogboek van security NT om beheerders op de hoogte te stellen van een provider die wordt uitgevoerd in deze vertrouwde status. |
NetworkServiceHost- | De provider, indien geïmplementeerd als in-proces, wordt geladen in het Wmiprvse.exe proces dat wordt uitgevoerd onder NetworkService-account. Vanaf Windows Vista is dit het standaardhostingmodel als de HostingModel- van een WMI-provider (__Win32Provider.HostingModel eigenschap) niet is opgegeven. Zie Beveiliging van hostingmodellenvoor meer informatie. NetworkServiceHost- heeft beperkte bevoegdheden en vermindert daarom de kans op uitbreiding van bevoegdheden. Als de provider alleen werkt op de lokale computer, stelt u de eigenschap HostingModel in op LocalServiceHost. |
NetworkServiceHostOrSelfHost | De provider wordt zelf-hostend of geladen in het WmiPrvse.exe proces dat wordt uitgevoerd onder het NetworkService-account. NetworkServiceHostOrSelfHost is de standaardconfiguratie wanneer de eigenschap HostingModel in __Win32ProviderNULL-is. Omdat NetworkServiceHostOrSelfHost de standaardinstelling is, kunnen providers van eerdere besturingssystemen blijven werken in Windows Vista, Windows Server 2008 en latere besturingssystemen. |
LocalServiceHost- | De provider, indien geïmplementeerd als in-proces, wordt geladen in het Wmiprvse.exe proces dat wordt uitgevoerd onder het LocalService-account. Dit is het aanbevolen hostingmodel voor services omdat LocalService beperkte bevoegdheden heeft. |
HostingModel-waarden voor losgekoppelde providers
De volgende lijst bevat de hostmodelwaarden van de provider voor losgekoppelde providers.
-
ontkoppeld:Com-
-
De provider is een losgekoppelde provider die wordt gehost in een afzonderlijk proces dat een client naar WMI is.
In het volgende voorbeeld ziet u de foldIdentity-aanduiding voor de eigenschap HostingModel ingesteld op FALSE, waarmee de provider de client kan imiteren.
Decoupled:Com:FoldIdentity(FALSE)
Als FoldIdentity niet is opgegeven, wordt de Waarde FoldIdentity standaard ingesteld op TRUE-. Om veiligheidsredenen is het raadzaam om FoldIdentity (FALSE) niet op te geven, omdat een frauduleuze toepassing met imitatie van gemachtigde invloed kan hebben op een heel domein.
In het volgende voorbeeld ziet u de eigenschap HostingModel ingesteld op de aanbevolen manier die gelijk is aan het instellen van FoldIdentity(TRUE).
Decoupled:Com
-
Losgekoppeld:Niet-
-
Alleen voor intern gebruik. Niet ondersteund.
Beveiliging van hostingmodellen
In de meeste gevallen is LocalSystem overbodig en is de context NetworkServiceHost beter geschikt. De meeste WMI-providers moeten de clientbeveiligingscontext imiteren om aangevraagde bewerkingen uit te voeren namens de WMI-client. Vanaf Windows Vista wordt een WMI-provider die geen hostmodeldefinitie heeft en wordt uitgevoerd alsof deze wordt uitgevoerd onder LocalSystem niet goed wordt uitgevoerd. Als u deze situatie wilt corrigeren, wijzigt u het verwachte hostingmodel en zorgt u ervoor dat de WMI-providercode de bewerkingen uitvoert in de clientbeveiligingscontext door de WMI-client te imiteren. LocalSystem is zelden een vereiste. Als uw provider dat bevoegdheidsniveau moet hebben, geeft u het hostingmodel op met de volgende instructie in het MOF-bestand.
HostingModel=LocalSystemHost