다음을 통해 공유


VBScript에서 비동기 호출에 보안 설정

반동기 호출의 성능은 일반적으로 대부분의 상황에 적합합니다. 비동기 호출은 일반적으로 스크립트에 권장되지 않습니다. 그러나 비동기 호출을 수행해야 하는 경우, 비동기 호출에서 WMI가 액세스 검사를 강제로 수행하도록 레지스트리 값을 설정할 수 있습니다.

HKEY_LOCAL_MACHINE\Software\Microsoft\WBEM\CIMOM\UnsecAppAccessControlDefault 레지스트리 값은 비동기 호출에 대한 데이터를 반환할 때 WMI가 허용되는 인증 수준을 확인하는지 여부를 제어합니다. 콜백은 원래 비동기 호출보다 낮은 인증 수준에서 반환될 수 있습니다. 기본적으로 이 값은 콜백이 선택되지 않도록 0으로 설정됩니다. 스크립팅에서 비동기 호출을 보호하려면 레지스트리 키를 1로 설정해야 합니다.

스크립트는 레지스트리 개체 StdRegProvGetStringValueSetStringValue 메서드를 사용하여 UnsecAppAccessControlDefault 레지스트리 값의 설정을 변경할 수 있습니다. 원격 액세스에 필요한 인증 및 가장 수준에 관한 자세한 내용은 원격 컴퓨터에서 WMI에 연결을 참조하세요.

VBScript에서 비동기 호출 보안을 설정하려면

다음 VBScript 코드 예제에서는 콜백의 WMI 인증을 제어하도록 레지스트리 값을 변경하는 방법을 보여줍니다.

스크립트는 UnsecAppAccessControlDefault 값을 0에서 1로 변경하거나 값이 이미 설정된 경우 1에서 0으로 변경합니다. 새로 설치된 시스템의 기본값은 0입니다. 플래그가 설정되면 다시 부팅 또는 WMI 다시 시작에서 설정이 유지됩니다.

스크립트는 SWbemMethod.InParameters 개체 및 SWbemObject.ExecMethod를 사용하여 StdRegProv.GetStringValueStdRegProv.SetStringValue를 호출합니다. InParameters 개체의 값을 설정하는 방법에 관한 자세한 내용은 InParameters 개체 생성 및 OutParameters 개체 구문 분석을 참조하세요. GetObject를 사용하는 레지스트리 호출의 예제는 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)