Hébergement et sécurité du fournisseur
La propriété HostingModel dans l’instance __Win32Provider qui représente votre fournisseur spécifie le modèle d’hébergement du fournisseur. Définir cette propriété entraîne le chargement du fournisseur dans un processus hôte partagé qui a un niveau de privilège spécifié.
Processus hôte partagé du fournisseur
WMI réside dans un service hôte partagé avec plusieurs autres services. Pour éviter d’arrêter tous les services lorsqu’un fournisseur échoue, les fournisseurs sont chargés dans un processus hôte séparé nommé « Wmiprvse.exe ». Plus d’un processus avec ce nom peut être en cours d’exécution. Chacun peut fonctionner sous un compte différent avec des niveaux de sécurité variables. Sachez qu’à partir de Windows Vista, utilisez la commande winmgmt pour exécuter WMI dans un processus séparé utilisant un port fixe. Pour plus d’informations, veuillez consulter la section Connexion à WMI à distance à partir de Vista.
L’hôte partagé peut fonctionner sous l’un des comptes système suivants dans un processus hôte Wmiprvse.exe :
Un fournisseur peut également être un serveur COM local (.exe), ou auto-hébergé, ce qui ne nécessite pas d’hôte fournisseur WMI.
Définir le modèle d’hébergement
Parce que LocalSystem est un compte privilégié, il est recommandé de définir HostingModel sur NetworkServiceHost lorsqu’un fournisseur fonctionne dans un processus Wmiprvse.exe. Le compte NetworkServiceHost est destiné aux services qui ne nécessitent pas de privilèges étendus, mais qui doivent communiquer à distance avec d’autres systèmes.
Si vous ne définissez pas de valeur pour la propriété HostingModel, WMI définira une valeur par défaut de NetworkServiceHostOrSelfHost. Si la valeur HostingModel est définie sur LocalSystemHost, WMI utilise la journalisation pour générer les événements 5603 et 5604 dans le journal des événements Windows. Parce que le compte local LocalSystem est très privilégié, cette configuration n’est pas recommandée. Vous pouvez visualiser ces événements dans le Event Viewer. Pour plus d’informations, consultez Suivi de l’acticité WMI.
Définissez la propriété HostingModel pour les fournisseurs découplés en « Decoupled:Com ». Les fournisseurs créés en ajoutant des classes d’instrumentation de Microsoft.Management.Infrastructure dans le .NET Framework sont des fournisseurs découplés. (System.Management.Instrumentation n’est plus pris en charge.) Pour plus d’informations sur la création d’un fournisseur découplé, veuillez consulter la section Incorporation d’un fournisseur dans une application.
Le modèle d’hébergement est spécifié dans la propriété HostingModel dans l’instance __Win32Provider qui représente votre fournisseur.
Pour définir le modèle d’hébergement pour un fournisseur
Dans le fichier MOF qui définit votre fournisseur, créez une instance de __Win32Provider.
Attribuez un nom au fournisseur dans la propriété Name et attribuez l’identificateur de classe (CLSID) de l’objet COM du fournisseur à la propriété Clsid.
L’exemple de code suivant attribue un nom à la propriété Name et le CLSID de l’objet COM du fournisseur à la propriété Clsid.
Instance of __Win32Provider as $NewProvider { Name = "MyProvider"; Clsid = "{.......}"; }
Attribuez la valeur d’hôte partagé appropriée à la propriété HostingModel. Les valeurs d’hôte partagé telles que "NetworkServiceHost" sont définies dans la propriété HostingSpecification de la classe MSFT_Providers.
L’exemple de code suivant attribue une valeur d’hôte partagé à la propriété HostingModel.
HostingModel = "NetworkServiceHost";
L’exemple de code suivant montre comment enregistrer un fournisseur dans NetworkServiceHost.
Instance of __Win32Provider as $NewProvider
{
Name = "MyProvider";
Clsid = "{.......}";
HostingModel = "NetworkServiceHost";
}
Si vous avez plusieurs fournisseurs, vous pouvez les regrouper dans un hôte de service spécifique en enregistrant votre fournisseur afin qu’il réside dans l’instance spécifique.
L’exemple de code suivant enregistre également un fournisseur dans NetworkServiceHost. La classe MSFT_Providers définit les valeurs des deux valeurs qui se combinent pour créer la propriété __Win32Provider HostingModel. Dans l’exemple, la valeur « NetworkServiceHost » provient de la propriété HostingSpecification de MSFT_Providers et « LocalServiceHost » provient de la propriété HostingGroup.
Instance of __Win32Provider as $NewProvider
{
Name = "MyProvider";
Clsid = "{.......}";
HostingModel = "NetworkServiceHost:MySharedHost";
}
Il existe des problèmes de développement spécifiques pour les fournisseurs qui ne sont pas découplés et qui sont hébergés dans le processus Wmiprvse. Pour plus d’informations, veuillez consulter la section Débogage des fournisseurs.
Si vous écrivez un fournisseur qui contient l’enregistrement de la propriété ou de la classe du fournisseur, tous les modèles de threading ne fonctionnent pas. Pour plus d’informations, consultez la section Choisir l’inscription correcte.
Valeurs de HostingModel pour les fournisseurs en processus
La liste suivante énumère les valeurs du modèle d’hébergement du fournisseur à utiliser dans l’instance __Win32Provider pour les fournisseurs qui s’exécutent dans un processus Wmiprvse.exe.
Valeur dans __Win32Provider.HostingModel | Description |
---|---|
SelfHost | Le fournisseur démarre en utilisant l’implémentation du serveur local au lieu de l’implémentation en processus. Le contexte de sécurité du processus dans lequel le fournisseur s’exécute détermine le contexte de sécurité du fournisseur. |
LocalSystemHost | Le fournisseur, s’il est implémenté en processus, est chargé dans un hôte de fournisseur partagé s’exécutant sous le contexte LocalSystem. À partir de Windows Vista, LocalSystemHost n’est plus le modèle d’hébergement par défaut si le HostingModel d’un fournisseur WMI (propriété __Win32Provider.HostingModel) n’est pas spécifié. Pour plus d’informations, veuillez consulter la section Sécurité des modèles d’hébergement. |
LocalSystemHostOrSelfHost | Le fournisseur est auto-hébergé ou chargé dans le processus Wmiprvse.exe s’exécutant sous le compte LocalSystem. Parce que LocalSystem est un compte très privilégié, une entrée est générée dans le journal des événements de sécurité NT pour informer les administrateurs d’un fournisseur fonctionnant dans ce statut de confiance. |
NetworkServiceHost | Le fournisseur, s’il est implémenté en processus, est chargé dans le processus Wmiprvse.exe s’exécutant sous le compte NetworkService. À partir de Windows Vista, c’est le modèle d’hébergement par défaut si le HostingModel d’un fournisseur WMI (propriété __Win32Provider.HostingModel) n’est pas spécifié. Pour plus d’informations, veuillez consulter la section Sécurité des modèles d’hébergement. NetworkServiceHost a des privilèges limités et réduit donc la possibilité d’une élévation de privilège. Si le fournisseur fonctionne uniquement au sein de l’ordinateur local, définissez la propriété HostingModel sur LocalServiceHost. |
NetworkServiceHostOrSelfHost | Le fournisseur est auto-hébergé ou chargé dans le processus WmiPrvse.exe s’exécutant sous le compte NetworkService. NetworkServiceHostOrSelfHost est la configuration par défaut lorsque la propriété HostingModel dans __Win32Provider est NULL. Parce que NetworkServiceHostOrSelfHost est la configuration par défaut, les fournisseurs des systèmes d’exploitation antérieurs peuvent continuer à fonctionner sous Windows Vista, Windows Server 2008 et les systèmes d’exploitation ultérieurs. |
LocalServiceHost | Le fournisseur, s’il est implémenté en processus, est chargé dans le processus Wmiprvse.exe s’exécutant sous le compte LocalService. C’est le modèle d’hébergement recommandé pour les services car LocalService a des privilèges limités. |
Valeurs de HostingModel pour les fournisseurs découplés
La liste suivante énumère les valeurs du modèle d’hébergement du fournisseur pour les fournisseurs découplés.
-
Decoupled:Com
-
Le fournisseur est un fournisseur découplé hébergé dans un processus séparé qui est un client de WMI.
L’exemple suivant montre le spécificateur FoldIdentity pour la propriété HostingModel défini sur FALSE, ce qui permet au fournisseur d’usurper l’identité du client.
Decoupled:Com:FoldIdentity(FALSE)
Si FoldIdentity n’est pas spécifié, la valeur FoldIdentity est définie sur TRUE par défaut. Pour des raisons de sécurité, il est recommandé de ne pas spécifier FoldIdentity(FALSE) car une application malveillante avec usurpation de Delegate peut affecter un domaine entier.
L’exemple suivant montre la propriété HostingModel définie de manière recommandée, ce qui équivaut à définir FoldIdentity(TRUE).
Decoupled:Com
-
Decoupled:Noncom
-
Réservé exclusivement à un usage interne. Non pris en charge.
Sécurité des modèles d’hébergement
Pour la plupart des situations, LocalSystem est inutile et le contexte NetworkServiceHost est plus approprié. La plupart des fournisseurs WMI doivent usurper l’identité du contexte de sécurité du client pour effectuer les opérations demandées au nom du client WMI. À partir de Windows Vista, un fournisseur WMI qui ne dispose pas d’une définition de modèle d’hébergement et s’exécute comme s’il fonctionnait sous LocalSystem ne fonctionnera pas correctement. Pour corriger cette situation, changez le modèle d’hébergement prévu et assurez-vous que le code du fournisseur WMI effectue les opérations dans le contexte de sécurité du client en usurpant l’identité du client WMI. LocalSystem est rarement une exigence. Si votre fournisseur doit avoir ce niveau de privilège, spécifiez le modèle d’hébergement avec la déclaration suivante dans le fichier MOF.
HostingModel=LocalSystemHost