Mendaftar untuk Peristiwa Registri Sistem

Untuk menerima pemberitahuan dari penyedia Registri Sistem , aplikasi manajemen harus mendaftar sebagai konsumen peristiwa sementara. Sebagian besar persyaratan untuk mendaftar ke penyedia Registri Sistem sama dengan pendaftaran peristiwa lainnya, kecuali Anda juga harus melakukan prosedur berikut.

Penyedia registri menyediakan kelas peristiwa untuk peristiwa di registri sistem. Untuk informasi selengkapnya tentang pendaftaran acara umum, lihat Menerima Acara WMI.

Prosedur berikut menjelaskan cara mendaftar untuk peristiwa registri sistem.

Untuk mendaftar peristiwa registri sistem

  1. Panggil metode kueri pemberitahuan.

    Dalam skrip atau C++, gunakan kueri pemberitahuan seperti SWbemServices.ExecNotificationQueryAsync atau IWbemServices::ExecNotificationQueryAsync. Buat string kueri untuk parameter bstrQueryIWbemServices::ExecNotificationQueryAsync atau strQuery dalam skrip.

  2. Tentukan jenis peristiwa mana yang ingin Anda terima dan buat kueri.

    Tabel berikut mencantumkan kelas peristiwa registri yang bisa Anda gunakan.

    Kelas peristiwa Lokasi Apache Hive Deskripsi
    RegistryEvent T/A
    Kelas dasar abstrak untuk perubahan registri.
    RegistryTreeChangeEvent RootPath
    Memantau perubahan pada hierarki kunci.
    RegistryKeyChangeEvent KeyPath
    Memantau perubahan pada satu kunci.
    RegistryValueChangeEvent ValueName
    Memantau perubahan pada satu nilai.

    Kelas-kelas ini memiliki properti yang disebut Apache Hive yang mengidentifikasi hierarki kunci yang akan dipantau untuk perubahan, seperti HKEY_LOCAL_MACHINE.

    Perubahan pada sarang HKEY_CLASSES_ROOT dan HKEY_CURRENT_USER tidak didukung oleh RegistryEvent atau kelas yang berasal darinya, seperti RegistryTreeChangeEvent.

  3. Buat klausa WHERE untuk pendaftaran peristiwa Anda.

    Penyedia System Registry memiliki aturan khusus untuk klausa WHERE. Untuk informasi selengkapnya, lihat Membuat Klausa WHERE yang Tepat untuk Penyedia Registri. Untuk informasi umum selengkapnya tentang membuat klausa WHERE, lihat Mengkueri dengan WQL.

  4. Tentukan apakah konsumen Anda menerima peristiwa.

    Penyedia Registri Sistem tidak menjamin bahwa semua peristiwa yang dikirim dikirimkan. Untuk informasi selengkapnya, lihat Menerima Peristiwa Registri.

Contoh kode VBScript berikut menunjukkan cara mendeteksi perubahan registri di HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft hive atau subtree. Ini adalah skrip pemantauan yang, untuk tujuan demonstrasi, berjalan dalam proses bernama Wscript.exe sampai dihentikan di Task Manager, WMI dihentikan, atau sistem operasi di-boot ulang. Skrip menggunakan panggilan semisinkron ke SWbemServices.ExecNotificationQuery. Untuk informasi selengkapnya tentang panggilan semisinkron, lihat Melakukan Panggilan Semisinkron dengan VBScript.

Set wmiServices = GetObject("winmgmts:root/default") 
Set colTreeChanges = wmiServices.ExecNotificationQuery _
    ("SELECT * FROM RegistryTreeChangeEvent " _
    & "WHERE Hive='HKEY_LOCAL_MACHINE' " _
    & "AND RootPath='SOFTWARE\\Microsoft'")

While (True)
   Set TreeChange = colTreeChanges.NextEvent
   TreeChange.GetObjectText_()
   Wscript.Echo  "Hive = " & TreeChange.Hive & VBNewLine _
      & "RootPath = "& TreeChange.RootPath _
      & TreeChange.GetObjectText_()      
Wend

Contoh kode VBScript berikut menunjukkan cara memantau perubahan nilai kunci dengan mendaftar untuk jenis peristiwa penyedia registri RegistryKeyChangeEvent. Skrip memanggil metode asinkron, SWbemServices.ExecNotificationQueryAsync. Untuk informasi selengkapnya tentang panggilan dan keamanan asinkron, lihat Melakukan Panggilan Asinkron dengan VBScript.

Skrip berikut berjalan tanpa batas waktu sampai komputer di-boot ulang, WMI dihentikan, atau skrip dihentikan. Untuk menghentikan skrip secara manual, gunakan Task Manager untuk menghentikan proses. Untuk menghentikannya secara terprogram, gunakan metode Hentikan di kelas Win32_Process.

strComputer = "."
Set objWMIServices = GetObject("winmgmts:root/default") 
Set wmiSink = WScript.CreateObject( _
    "WbemScripting.SWbemSink", "SINK_") 
Set ObjRegistry = GetObject("winmgmts:_
    {impersonationLevel = impersonate}!\\" _
    & strComputer & "\root\default:StdRegProv")

' Create a new key
strPath = "SOFTWARE\MyKey\MySubKey\"
Return = objRegistry.CreateKey(HKEY_LOCAL_MACHINE, strPath)

' Start listening for change in key
objWMIServices.ExecNotificationQueryAsync wmiSink, _ 
    "SELECT * FROM RegistryKeyChangeEvent " _ 
    & "WHERE Hive='HKEY_LOCAL_MACHINE' AND " _ 
    & "KeyPath='SOFTWARE\\MyKey\\MySubKey\\'" 
WScript.Echo "Listening for Registry Change Events..." 

While(True) 
    WScript.Sleep 1000
' You can use Regedit to make a change in the key 
' HKEY_LOCAL_MACHINE\SOFTWARE\MyKey\MySubKey\ 
'    to see an event generated.
Wend 

Sub SINK_OnObjectReady(EventObject, wmiAsyncContext) 
    WScript.Echo "Received Registry Change Event" & vbCrLf & _
      EventObject.GetObjectText_() 
End Sub