Hosting e sicurezza del provider

La proprietà HostingModel nell'istanza di __Win32Provider che rappresenta il provider specifica il modello di hosting del provider. L'impostazione di questa proprietà determina il caricamento del provider in un processo host condiviso con un livello di privilegio specificato.

Processo host provider condiviso

WMI risiede in un host del servizio condiviso con diversi altri servizi. Per evitare di arrestare tutti i servizi quando un provider non riesce, i provider vengono caricati in un processo host separato denominato "Wmiprvse.exe". È possibile eseguire più processi con questo nome. Ognuno può essere eseguito con un account diverso con sicurezza variabile. Tenere presente che, a partire da Windows Vista, usare il comando winmgmt per eseguire WMI in un processo separato usando una porta fissa. Per altre informazioni, vedere Connessione a WMI in remoto a partire da Vista.

L'host condiviso può essere eseguito con uno degli account di sistema seguenti in un processo host Wmiprvse.exe:

Un provider può anche essere un server COM locale (.exe) o self-hosted, che non richiede un host del provider WMI.

Impostazione del modello di hosting

Poiché LocalSystem è un account con privilegi, è consigliabile impostare HostingModel su NetworkServiceHost quando un provider è in esecuzione in un processo di Wmiprvse.exe. L'account NetworkServiceHost è destinato ai servizi che non richiedono privilegi estesi, ma devono comunicare in remoto con altri sistemi.

Se non si imposta un valore per la proprietà HostingModel , WMI imposta un valore predefinito di NetworkServiceHostOrSelfHost. Se il valore HostingModel è impostato su LocalSystemHost, WMI usa la traccia per generare eventi 5603 e 5604 nel registro eventi di Windows. Poiché l'account LocalSystem locale ha privilegi elevati, questa impostazione non è consigliata. È possibile visualizzare questi eventi nella Visualizzatore eventi. Per altre informazioni, vedere Traccia dell'attività WMI.

Impostare la proprietà HostingModel per i provider disaccoppiati come "Decoupled:Com". I provider creati aggiungendo classi di strumentazione da Microsoft.Management.Infrastructure in .NET Framework sono provider disaccoppiati. System.Management.Instrumentation non è più supportato. Per altre informazioni sulla creazione di un provider disaccoppiato, vedere Incorporazione di un provider in un'applicazione.

Il modello di hosting viene specificato nella proprietà HostingModel nell'istanza di __Win32Provider che rappresenta il provider.

Per impostare il modello di hosting per un provider

  1. Nel file MOF che definisce il provider creare un'istanza di __Win32Provider.

  2. Assegnare un nome al provider nella proprietà Name e assegnare l'identificatore di classe (CLSID) dell'oggetto COM del provider alla proprietà Clsid .

    Nell'esempio di codice seguente viene assegnato un nome alla proprietà Name e al CSLID dell'oggetto COM del provider alla proprietà Clsid .

    Instance of __Win32Provider as $NewProvider
    {
        Name = "MyProvider";
        Clsid = "{.......}";
    }
    
  3. Assegnare il valore host condiviso appropriato alla proprietà HostingModel . I valori dell'host condiviso, ad esempio "NetworkServiceHost" vengono definiti nella proprietà HostingSpecification della classe MSFT_Providers .

    Nell'esempio di codice seguente viene assegnato un valore host condiviso alla proprietà HostingModel .

    HostingModel = "NetworkServiceHost";
    

Nell'esempio di codice seguente viene illustrato come registrare un provider in NetworkServiceHost.

Instance of __Win32Provider as $NewProvider
{
    Name = "MyProvider";
    Clsid = "{.......}";
    HostingModel = "NetworkServiceHost";
}

Se si dispone di più provider, è possibile raggrupparli in un host di servizio specifico registrando il provider in modo che risieda nell'istanza specifica.

L'esempio di codice seguente registra anche un provider in NetworkServiceHost. La classe MSFT_Providers definisce i valori per i due valori che combinano per creare la proprietà __Win32Provider HostingModel. Nell'esempio il valore "NetworkServiceHost" deriva dalla proprietà HostingSpecification di MSFT_Providers e "LocalServiceHost" deriva dalla proprietà HostingGroup .

Instance of __Win32Provider as $NewProvider
{
    Name = "MyProvider";
    Clsid = "{.......}";
    HostingModel = "NetworkServiceHost:MySharedHost";
}

Esistono problemi di sviluppo speciali per i provider che non sono separati e sono ospitati nel processo Wmiprvse. Per altre informazioni, vedere Debug dei provider.

Se si scrive un provider che contiene la registrazione di proprietà o provider di classi, non tutti i modelli di threading funzionano. Per altre informazioni, vedere Scelta della registrazione corretta.

Valori di HostingModel per i provider in-process

Nell'elenco seguente sono elencati i valori del modello di hosting del provider da usare nell'istanza di __Win32Provider per i provider eseguiti in un processo di Wmiprvse.exe.

Valore in __Win32Provider.HostingModel Descrizione
SelfHost Il provider inizia a usare l'implementazione del server locale anziché in-process. Il contesto di sicurezza del processo in cui viene eseguito il provider determina il contesto di sicurezza del provider.
LocalSystemHost Il provider, se implementato come in-process, viene caricato in un host del provider condiviso in esecuzione nel contesto LocalSystem . A partire da Windows Vista, LocalSystemHost non è più il modello di hosting predefinito se HostingModel di un provider WMI (__Win32Provider. La proprietà HostingModel) non è specificata. Per altre informazioni, vedere Sicurezza dei modelli di hosting.
LocalSystemHostOrSelfHost Il provider è self-hosted o caricato nel processo di Wmiprvse.exe in esecuzione con l'account LocalSystem . Poiché LocalSystem è un account con privilegi elevati, viene generata una voce nel registro eventi di Security NT per notificare agli amministratori di un provider in esecuzione in questo stato attendibile.
NetworkServiceHost Il provider, se implementato come in-process, viene caricato nel processo di Wmiprvse.exe in esecuzione nell'account NetworkService . A partire da Windows Vista, si tratta del modello di hosting predefinito se HostingModel di un provider WMI (__Win32Provider.La proprietà HostingModel) non è specificata. Per altre informazioni, vedere Sicurezza dei modelli di hosting.
NetworkServiceHost dispone di privilegi limitati e quindi riduce la possibilità di un attacco di elevazione dei privilegi. Se il provider opera solo all'interno del computer locale, impostare la proprietà HostingModel su LocalServiceHost.
NetworkServiceHostOrSelfHost Il provider è self-hosted o caricato nel processo di WmiPrvse.exe in esecuzione nell'account NetworkService . NetworkServiceHostOrSelfHost è la configurazione predefinita quando la proprietà HostingModel in __Win32Provider è NULL. Poiché NetworkServiceHostOrSelfHost è l'impostazione predefinita, i provider dei sistemi operativi precedenti possono continuare a funzionare in Windows Vista, Windows Server 2008 e sistemi operativi successivi.
LocalServiceHost Il provider, se implementato come in-process, viene caricato nel processo di Wmiprvse.exe in esecuzione con l'account LocalService . Si tratta del modello di hosting consigliato per i servizi perché LocalService dispone di privilegi limitati.

Valori di HostingModel per provider disaccoppiati

Nell'elenco seguente sono elencati i valori del modello di hosting del provider per i provider disaccoppiati.

Disaccoppiato:Com

Il provider è un provider disaccoppiato ospitato in un processo separato che è un client per WMI.

Nell'esempio seguente viene illustrato l'identificatore FoldIdentity per la proprietà HostingModel impostata su FALSE, che consente al provider di rappresentare il client.

Decoupled:Com:FoldIdentity(FALSE)

Se FoldIdentity non viene specificato, il valore FoldIdentity viene impostato su TRUE per impostazione predefinita. Per motivi di sicurezza, è consigliabile non specificare FoldIdentity(FALSE) perché un'applicazione non autorizzata con rappresentazione del delegato può influire su un intero dominio.

Nell'esempio seguente viene illustrata la proprietà HostingModel impostata nel modo consigliato che equivale all'impostazione di FoldIdentity(TRUE).

Decoupled:Com

Disaccoppiato:Noncom

Solo per uso interno. Non supportato.

Sicurezza dei modelli di hosting

Per la maggior parte delle situazioni, LocalSystem non è necessario e il contesto NetworkServiceHost è più appropriato. La maggior parte dei provider WMI deve rappresentare il contesto di sicurezza client per eseguire operazioni richieste per conto del client WMI. A partire da Windows Vista, un provider WMI che non dispone di una definizione del modello di hosting e viene eseguito come se fosse in esecuzione in LocalSystem non verrà eseguito correttamente. Per risolvere questa situazione, modificare il modello di hosting previsto e assicurarsi che il codice del provider WMI esegua le operazioni nel contesto di sicurezza client rappresentando il client WMI. LocalSystem è raramente un requisito. Se il provider deve disporre di tale livello di privilegio, specificare il modello di hosting con l'istruzione seguente nel file MOF.

HostingModel=LocalSystemHost

Scelta della registrazione corretta

Accesso agli spazi dei nomi WMI

Protezione degli spazi dei nomi WMI

Classi di configurazione e risoluzione dei problemi del provider

MSFT_Providers

Gestione della sicurezza WMI