Share via


Définition de la sécurité sur un appel asynchrone dans VBScript

La performance des appels semi-synchrones est généralement suffisante pour la plupart des situations. Les appels asynchrones ne sont généralement pas une pratique recommandée pour les scripts. Toutefois, si des appels asynchrones doivent être effectués, une valeur de registre peut être définie pour forcer WMI à effectuer des vérifications d’accès sur les appels asynchrones.

La valeur de registre HKEY_LOCAL_MACHINE\Software\Microsoft\WBEM\CIMOM\UnsecAppAccessControlDefault contrôle si WMI vérifie un niveau d’authentification acceptable lors du retour de données pour un appel asynchrone. Le rappel peut être retourné à un niveau d’authentification inférieur à celui de l’appel asynchrone d’origine. Par défaut, cette valeur est définie sur zéro afin que les rappels ne soient pas vérifiés. Pour sécuriser les appels asynchrones dans les scripts, vous devez définir la clé de registre sur 1 (un).

Les scripts peuvent utiliser les méthodes GetStringValue et SetStringValue de l’objet de registre StdRegProv pour modifier le paramètre de la valeur de registre UnsecAppAccessControlDefault. Pour plus d’informations sur les niveaux d’authentification et d’emprunt d’identité requis pour l’accès à distance, consultez Connexion à WMI sur un ordinateur distant.

Pour définir la sécurité des appels asynchrones dans VBScript

L’exemple de code VBScript suivant montre comment modifier la valeur du registre pour contrôler l’authentification WMI des rappels.

Le script modifie la valeur d’UnsecAppAccessControlDefault de zéro à un, ou, si la valeur est déjà définie, de un à zéro. Zéro est la valeur par défaut pour un système nouvellement installé. Une fois l’indicateur défini, le paramètre persiste pendant le redémarrage ou le redémarrage WMI.

Le script utilise un objet SWbemMethod.InParameters et SWbemObject.ExecMethod pour appeler StdRegProv.GetStringValue et StdRegProv.SetStringValue. Pour plus d’informations sur la définition des valeurs dans InParameters, consultez Construction d’objets InParameters et analyse des objets OutParameters. Pour obtenir un exemple d’appel de registre à l’aide de GetObject, consultez StdRegProv.SetStringValue.

' Registry key value in hex
Const hklm = &h800000002  
' Subkey string 
Const Subkey = "software\\microsoft\\wbem\\cimom" 
' Asynchronous access control
Const sValueName = "UnsecAppAccessControlDefault" 

' Obtain registry object
Set objReg = GetObject("winmgmts:root\default:StdRegProv") 

' Get the initial value of the asynchronous 
'   access control registry key
' Use an InParameters object to set up the 
'   parameters for the ExecMethod call
' For more information see Constructing InParameters Objects 
'   topic and SWbemObject.ExecMethod_ topic

Set InParams = objReg.methods_("GetStringValue").InParameters.SpawnInstance_
InParams.hDefKey = hklm
InParams.sSubKeyName = Subkey
InParams.sValueName = sValueName

' Get return value from OutParameters object returned by ExecMethod. 
' For more information see Parsing OutParameters Objects topic

Set OutParams = objReg.Execmethod_("GetStringValue",InParams)

If (OutParams.ReturnValue <> 0) then
   Wscript.Echo "GetStringValue returned " & OutParams.ReturnValue
   Wscript.Quit 1
End If

Svalue = OutParams.sValue
If (sValue = 0) Then
   AccessControl = "WMI not performing asynch access control"
Else 
   AccessControl = "WMI performing asynch access control"  
End If
Wscript.Echo sValueName & " = " _
    & sValue & VBNewLine & AccessControl

' Change asynchronous access control registry key value
Set InParams = objReg.methods_("SetStringValue").InParameters.SpawnInstance_

InParams.hDefKey = hklm
InParams.sSubKeyName = Subkey
InParams.sValueName = sValueName
InParams.sValue = sValue XOR 1

Set OutParams = objReg.ExecMethod_("SetStringValue",InParams)

If (OutParams.Returnvalue <> 0) Then
    Wscript.Echo "SetStringValue returned " & OutParams.Returnvalue
    Wscript.Quit 1
End If

Wscript.Echo SValueName & " changed to " & (sValue XOR 1)