Bagikan melalui


Mengatur Keamanan pada Panggilan Asinkron di VBScript

Performa panggilan semisinkron biasanya memadai untuk sebagian besar situasi. Panggilan asinkron umumnya bukan praktik yang direkomendasikan untuk skrip. Namun, jika panggilan asinkron harus dilakukan, nilai registri dapat diatur untuk memaksa WMI melakukan pemeriksaan akses pada panggilan asinkron.

Nilai registri HKEY_LOCAL_MACHINE\Software\Microsoft\WBEM\CIMOM\UnsecAppAccessControlDefault mengontrol apakah WMI memeriksa tingkat autentikasi yang dapat diterima saat mengembalikan data untuk panggilan asinkron. Panggilan balik dapat dikembalikan pada tingkat autentikasi yang lebih rendah daripada panggilan asinkron asli. Secara default, nilai ini diatur ke nol sehingga panggilan balik tidak diperiksa. Untuk mengamankan panggilan asinkron dalam pembuatan skrip, Anda harus mengatur kunci registri ke 1 (satu).

Skrip dapat menggunakan metode GetStringValue dan SetStringValue dari objek registri StdRegProv untuk mengubah pengaturan nilai registri UnsecAppAccessControlDefault . Untuk informasi selengkapnya tentang tingkat autentikasi dan peniruan yang diperlukan untuk akses jarak jauh, lihat Menyambungkan ke WMI di Komputer Jarak Jauh.

Untuk mengatur keamanan panggilan asinkron di VBScript

Contoh kode VBScript berikut menunjukkan kepada Anda cara mengubah nilai registri untuk mengontrol autentikasi panggilan balik WMI.

Skrip mengubah nilai UnsecAppAccessControlDefault dari nol menjadi satu, atau jika nilai sudah diatur, dari satu menjadi nol. Nol adalah default pada sistem yang baru diinstal. Setelah bendera diatur, pengaturan tetap ada di reboot atau mulai ulang WMI.

Skrip menggunakan objek SWbemMethod.InParameters dan SWbemObject.ExecMethod untuk memanggil StdRegProv.GetStringValue dan StdRegProv.SetStringValue. Untuk informasi selengkapnya tentang mengatur nilai dalam objek InParameters , lihat Membuat Objek InParameters dan Mengurai Objek OutParameters. Untuk contoh panggilan registri menggunakan GetObject, lihat 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)