Providervärd och säkerhet
Egenskapen HostingModel i den __Win32Provider-instans som representerar leverantören anger providerns värdmodell. Om du anger den här egenskapen läses providern in i en delad värdprocess som har en angiven behörighetsnivå.
Värdprocess för delad provider
WMI finns i en delad tjänstvärd med flera andra tjänster. För att undvika att stoppa alla tjänster när en provider misslyckas läses leverantörer in i en separat värdprocess med namnet "Wmiprvse.exe". Fler än en process med det här namnet kan köras. Var och en kan köras under ett annat konto med varierande säkerhet. Tänk på att från och med Windows Vista använder du kommandot winmgmt för att köra WMI i en separat process med hjälp av en fast port. Mer information finns i Ansluta till WMI via fjärranslutning med Vista.
Den delade värden kan köras under något av följande systemkonton i en Wmiprvse.exe värdprocess:
En provider kan också vara en lokal COM-server (.exe) eller lokalt installerad, vilket inte kräver en WMI-providervärd.
Ange värdmodell
Eftersom LocalSystem är ett privilegierat konto rekommenderar vi att du anger HostingModel till NetworkServiceHost när en provider körs i en Wmiprvse.exe process. NetworkServiceHost-kontot är för tjänster som inte kräver omfattande privilegier, men som behöver kommunicera via fjärranslutning med andra system.
Om du inte anger något värde för egenskapen HostingModel anger WMI standardvärdet NetworkServiceHostOrSelfHost. Om värdet HostingModel anges till LocalSystemHostanvänder WMI spårning för att generera händelser 5603 och 5604 i Windows-händelseloggen. Eftersom det lokala LocalSystem-kontot är mycket privilegierat rekommenderas inte den här inställningen. Du kan visa dessa händelser i Loggboken. Mer information finns i spårning av WMI-aktivitet.
Ange egenskapen HostingModel för frikopplade leverantörer som "Decoupled:Com". Leverantörer som skapats genom att lägga till instrumentationsklasser från Microsoft.Management.Infrastructure i .NET Framework är frikopplade leverantörer. (System.Management.Instrumentation stöds inte längre.) Mer information om hur du skapar en frikopplad provider finns i Införliva en provider i ett program.
Värdmodellen anges i egenskapen HostingModel i den __Win32Provider instans som representerar din provider.
Ange värdmodellen för en provider
I MOF-filen som definierar din provider skapar du en instans av __Win32Provider.
Tilldela providern ett namn i egenskapen Name och tilldela klassidentifieraren (CLSID) för PROVIDER COM-objektet till egenskapen Clsid.
I följande kodexempel tilldelas ett namn till egenskapen Name och CSLID för PROVIDER COM-objektet till egenskapen Clsid.
Instance of __Win32Provider as $NewProvider { Name = "MyProvider"; Clsid = "{.......}"; }
Tilldela lämpligt delat värdvärde till egenskapen HostingModel. Delade värdvärden som "NetworkServiceHost" definieras i egenskapen HostingSpecification för MSFT_Providers klass.
I följande kodexempel tilldelas ett delat värdvärde till egenskapen HostingModel.
HostingModel = "NetworkServiceHost";
I följande kodexempel visas hur du registrerar en provider i NetworkServiceHost.
Instance of __Win32Provider as $NewProvider
{
Name = "MyProvider";
Clsid = "{.......}";
HostingModel = "NetworkServiceHost";
}
Om du har flera leverantörer kan du gruppera dem till en specifik tjänstvärd genom att registrera din leverantör så att den finns i den specifika instansen.
I följande kodexempel registreras även en provider i NetworkServiceHost. Klassen MSFT_Providers definierar värden för de två värden som kombineras för att skapa egenskapen __Win32ProviderHostingModel. I exemplet kommer värdet "NetworkServiceHost" från egenskapen HostingSpecification för MSFT_Providers och "LocalServiceHost" från egenskapen HostingGroup.
Instance of __Win32Provider as $NewProvider
{
Name = "MyProvider";
Clsid = "{.......}";
HostingModel = "NetworkServiceHost:MySharedHost";
}
Det finns särskilda utvecklingsproblem för leverantörer som inte är frikopplade och som finns i Wmiprvse-processen. Mer information finns i Felsöka providers.
Om du skriver en provider som innehåller egenskaps- eller klassproviderregistrering fungerar inte alla trådmodeller. Mer information finns i Välja rätt registrering.
HostingModel-värden för In-Process providers
I följande lista visas de värdmodellvärden för providern som ska användas i den __Win32Provider instansen för leverantörer som körs i en Wmiprvse.exe process.
Värde i __Win32Provider.HostingModel | Beskrivning |
---|---|
SelfHost | Providern börjar använda den lokala serverimplementeringen i stället för i processen. Säkerhetskontexten för den process som providern kör avgör providerns säkerhetskontext. |
LocalSystemHost | Providern, om den implementeras som pågående, läses in i en delad providervärd som körs under LocalSystem- kontext. Från och med Windows Vista är LocalSystemHost inte längre standardvärdmodellen om HostingModel för en WMI-provider (__Win32Provider.HostingModel egenskap) är ospecificerad. Mer information finns i Säkerhet för värdmodeller. |
LocalSystemHostOrSelfHost | Providern är lokalt installerad eller läses in i Wmiprvse.exe process som körs under LocalSystem-kontot. Eftersom LocalSystem är ett konto med hög behörighet genereras en post i säkerhets-NT-händelseloggen för att meddela administratörer om en leverantör som körs i den här betrodda statusen. |
NetworkServiceHost | Providern, om den implementeras som pågående, läses in i Wmiprvse.exe process som körs under NetworkService-konto. Från och med Windows Vista är detta standardvärdmodellen om HostingModel- för en WMI-provider (__Win32Provider.HostingModel-egenskapen) är ospecificerad. Mer information finns i Säkerhet för värdmodeller. NetworkServiceHost har begränsade privilegier och minskar därför risken för utökade privilegier. Om providern endast fungerar på den lokala datorn anger du egenskapen HostingModel till LocalServiceHost. |
NetworkServiceHostOrSelfHost | Providern är lokalt installerad eller läses in i WmiPrvse.exe process som körs under NetworkService-kontot. NetworkServiceHostOrSelfHost är standardkonfigurationen när egenskapen HostingModel i __Win32Provider är NULL-. Eftersom NetworkServiceHostOrSelfHost är standard kan leverantörer från tidigare operativsystem fortsätta att arbeta i Windows Vista, Windows Server 2008 och senare operativsystem. |
LocalServiceHost | Providern, om den implementeras som pågående, läses in i den Wmiprvse.exe process som körs under LocalService-kontot. Detta är den rekommenderade värdmodellen för tjänster eftersom LocalService har begränsade privilegier. |
HostingModel-värden för frikopplade leverantörer
I följande lista visas värden för providerns värdmodell för frikopplade leverantörer.
-
frikopplad:Com
-
Providern är en frikopplad provider som finns i en separat process som är en klient till WMI.
I följande exempel visas FoldIdentity-specificeraren för egenskapen HostingModel inställd på FALSE, vilket gör att providern kan personifiera klienten.
Decoupled:Com:FoldIdentity(FALSE)
Om FoldIdentity inte har angetts anges FoldIdentity-värdet till TRUE- som standard. Av säkerhetsskäl rekommenderar vi att du inte anger FoldIdentity(FALSE) eftersom ett otillåtet program med personifiering av Ombud kan påverka en hel domän.
I följande exempel visas egenskapen HostingModel som anges på det rekommenderade sättet som motsvarar inställningen FoldIdentity(TRUE).
Decoupled:Com
-
Frikopplad:Noncom-
-
Endast för internt bruk. Stöds inte.
Säkerhet för värdmodeller
I de flesta fall är LocalSystem- onödigt och NetworkServiceHost- kontext är lämpligare. De flesta WMI-providers måste personifiera klientsäkerhetskontexten för att utföra begärda åtgärder för WMI-klientens räkning. Från och med Windows Vista körs inte en WMI-provider som saknar en värdmodelldefinition och körs som om den körs under LocalSystem-. För att åtgärda den här situationen ändrar du den förväntade värdmodellen och ser till att WMI-providerkoden utför åtgärderna i klientsäkerhetskontexten genom att personifiera WMI-klienten. LocalSystem är sällan ett krav. Om providern måste ha den behörighetsnivån anger du värdmodellen med följande instruktion i MOF-filen.
HostingModel=LocalSystemHost