Sdílet prostřednictvím


Nastavení zabezpečení asynchronního volání v jazyce VBScript

Výkonnost polosynchronních volání je obvykle vhodná pro většinu situací. Asynchronní volání obecně nejsou doporučeným postupem pro skripty. Pokud je však nutné provést asynchronní volání, je možné nastavit hodnotu registru tak, aby rozhraní WMI prováděla kontroly přístupu u asynchronních volání.

HKEY_LOCAL_MACHINE\Software\Microsoft\WBEM\CIMOM\UnsecAppAccessControlDefault hodnota registru určuje, zda WMI kontroluje přijatelnou úroveň ověření při vracení dat pro asynchronní volání. Zpětné volání může být vráceno na nižší úrovni ověřování než původní asynchronní volání. Ve výchozím nastavení je tato hodnota nastavena na nulu, takže zpětná volání nejsou kontrolována. Pokud chcete zabezpečit asynchronní volání ve skriptování, musíte klíč registru nastavit na hodnotu 1 (jedna).

Skripty mohou použít GetStringValue a SetStringValue metody objektu registru StdRegProv změnit nastavení UnsecAppAccessControlDefault hodnotu registru. Další informace o úrovních ověřování a zosobnění vyžadovaných pro vzdálený přístup najdete v tématu Připojení k rozhraní WMI na vzdáleném počítači.

Nastavení zabezpečení asynchronního volání v jazyce VBScript

Následující příklad kódu jazyka VBScript ukazuje, jak změnit hodnotu registru pro správu ověřování zpětných volání WMI.

Skript změní hodnotu UnsecAppAccessControlDefault z nuly na jednu, nebo pokud je hodnota již nastavena, z jedné na nulu. Nula je výchozí hodnota v nově nainstalovaném systému. Jakmile nastavíte vlajku, toto nastavení přetrvá i po restartování systému nebo rozhraní WMI.

Skript používá objekt SWbemMethod.InParameters a SWbemObject.ExecMethod ke spuštění StdRegProv.GetStringValue a StdRegProv.SetStringValue. Další informace o nastavení hodnot v objektu InParameters naleznete v části Vytváření objektů InParameters a Analýza objektů OutParameters. Příklad volání registru pomocí GetObject, viz 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)