Exécution d’opérations privilégiées

Les opérations privilégiées nécessitent des privilèges de sécurité tels que SeLoadDriverPrivilege (wbemPrivilegeLoadDriver dans les constantes d’API scripting), un privilège qui doit être activé pour un compte qui charge un pilote de périphérique. Vous ne pouvez pas ajouter de privilèges à un administrateur ou à un utilisateur via WMI. Vous pouvez uniquement activer les privilèges dont dispose déjà le compte. Pour une liste de privilèges, consultez Privilege_Constants.

Par défaut, un utilisateur local sur un ordinateur peut lire des données statiques à partir du référentiel WMI, écrire dans des instances fournies par des fournisseurs et exécuter des méthodes de fournisseur, sauf si le fournisseur applique ses propres exigences de sécurité. Seuls les administrateurs peuvent se connecter à un ordinateur distant, modifier les descripteurs de sécurité ou modifier les données de référentiel WMI statiques, telles qu’une définition de classe WMI. Tous les privilèges sont activés pour une connexion à distance. Pour plus d’informations, consultez Sécurisation d’une connexion WMI distante.

Les constantes de privilège pour C++ diffèrent de celles utilisées par les langages d’automatisation tels que Visual Basic. Les scripts doivent utiliser la valeur de la constante plutôt que le nom. Pour plus d’informations, consultez Exécution d’opérations privilégiées à l’aide de C++ ou Exécution d’opérations privilégiées à l’aide de VBScript.

Une cause courante des erreurs de refus d’accès lors de l’utilisation de WMI est l’absence d’un privilège activé pour les opérations, comme l’obtention de toutes les instances de Win32_NTEventlogFile. Sans activer le privilège SeSecurity , vous ne pouvez pas accéder au fichier journal de sécurité.

L’exemple de code VBScript suivant montre comment définir le privilège SeSecurity dans la chaîne moniker. Lorsqu’il est utilisé dans le moniker, le nom de privilège entre parenthèses supprime le « Se » initial. Pour plus d’informations, consultez Construction d’une chaîne moniker.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate,(Security)}!\\" _
    & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
    ("Select * from Win32_NTEventLogFile " _
    & "Where LogFileName='Security'")
For Each LogFile in colFiles
Wscript.Echo LogFile.NumberOfRecords
Next

Constantes de privilèges