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à causa il caricamento del provider in un processo host condiviso con un livello di privilegio specificato.

Processo host del provider condiviso

WMI risiede in un host di servizio condiviso con diversi altri servizi. Per evitare di arrestare tutti i servizi quando un provider ha esito negativo, i provider vengono caricati in un processo host separato denominato "Wmiprvse.exe". È possibile eseguire più di un processo con questo nome. Ognuna può essere eseguita in 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 in 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 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 è per i servizi che non richiedono privilegi estesi, ma è necessario 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 è con privilegi elevati, questa impostazione non è consigliata. È possibile visualizzare questi eventi nella Visualizzatore eventi. Per altre informazioni, vedere Traccia 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 Incorporando 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 host condivisi, ad esempio "NetworkServiceHost" sono 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 si trovi 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 combinati per creare la proprietà HostingModel __Win32Provider. Nell'esempio il valore "NetworkServiceHost" proviene dalla proprietà HostingSpecification di MSFT_Providers e "LocalServiceHost" proviene 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 di 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. 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 provider condiviso in esecuzione nel contesto di 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 nell'account LocalSystem . Poiché LocalSystem è un account con privilegi elevati, viene generata una voce nel registro eventi 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 riduce quindi la possibilità di elevare un attacco con 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 è il valore predefinito, 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 nell'account LocalService . Si tratta del modello di hosting consigliato per i servizi perché LocalService ha 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 a 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 è specificato, il valore FoldIdentity è impostato su TRUE per impostazione predefinita. Per motivi di sicurezza, è consigliabile non specificare FoldIdentity(FALSE) poiché 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 equivalente 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 manca di una definizione del modello di hosting ed esegue come se sia in esecuzione in LocalSystem non verrà eseguito correttamente. Per correggere 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 avere 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