Virtualisasi Registri

Virtualisasi registri adalah teknologi kompatibilitas aplikasi yang memungkinkan operasi penulisan registri yang memiliki dampak global untuk dialihkan ke lokasi per pengguna. Pengalihan ini transparan untuk aplikasi yang membaca dari atau menulis ke registri. Ini didukung dimulai dengan Windows Vista.

Bentuk virtualisasi ini adalah teknologi kompatibilitas aplikasi sementara; Microsoft berniat untuk menghapusnya dari versi sistem operasi Windows di masa mendatang karena lebih banyak aplikasi dibuat kompatibel dengan Windows Vista dan versi Windows yang lebih baru. Oleh karena itu, penting bahwa aplikasi Anda tidak bergantung pada perilaku virtualisasi registri dalam sistem.

Virtualisasi hanya dimaksudkan untuk memberikan kompatibilitas untuk aplikasi yang ada. Aplikasi yang dirancang untuk Windows Vista dan versi Windows yang lebih baru tidak boleh menulis ke area sistem sensitif, juga tidak boleh mengandalkan virtualisasi untuk memperbaiki masalah apa pun. Ketika memperbarui kode yang ada untuk dijalankan pada Windows Vista dan versi Windows yang lebih baru, pengembang harus memastikan bahwa aplikasi hanya menyimpan data di lokasi per pengguna atau di lokasi komputer dalam %alluserprofile% yang menggunakan daftar kontrol akses (ACL) dengan benar.

Untuk informasi selengkapnya tentang membangun aplikasi yang mematuhi UAC, lihat Panduan Pengembang UAC.

Gambaran Umum Virtualisasi

Sebelum Windows Vista, aplikasi biasanya dijalankan oleh administrator. Akibatnya, aplikasi dapat dengan bebas mengakses file sistem dan kunci registri. Jika aplikasi ini dijalankan oleh pengguna standar, aplikasi akan gagal karena hak akses yang tidak mencukupi. Windows Vista dan versi Windows yang lebih baru meningkatkan kompatibilitas aplikasi untuk aplikasi ini dengan mengalihkan operasi ini secara otomatis. Misalnya, operasi registri ke penyimpanan global (HKEY_LOCAL_MACHINE\Software) dialihkan ke lokasi per pengguna dalam profil pengguna yang dikenal sebagai penyimpanan virtual (HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software).

Virtualisasi registri dapat diklasifikasikan secara luas ke dalam jenis berikut:

Buka Virtualisasi Registri

Jika penelepon tidak memiliki akses tulis ke kunci dan mencoba membuka kunci, kunci dibuka dengan akses maksimum yang diizinkan untuk penelepon tersebut.

Jika bendera REG_KEY_DONT_SILENT_FAIL diatur untuk kunci, operasi gagal dan kunci tidak dibuka. Untuk informasi selengkapnya, lihat "Mengontrol Virtualisasi Registri" nanti dalam topik ini.

Menulis Virtualisasi Registri

Jika penelepon tidak memiliki akses tulis ke kunci dan mencoba menulis nilai ke dalamnya atau membuat subkunci, nilai ditulis ke penyimpanan virtual.

Misalnya, jika pengguna terbatas mencoba menulis nilai ke kunci berikut: HKEY_LOCAL_MACHINE\Software\AppKey1, virtualisasi mengalihkan operasi tulis ke HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software\AppKey1.

Membaca Virtualisasi Registri

Jika pemanggil membaca dari kunci yang divirtualisasikan, registri menyajikan tampilan gabungan dari nilai virtual (dari penyimpanan virtual) dan nilai non-virtual (dari penyimpanan global) ke pemanggil.

Misalnya, HKEY_LOCAL_MACHINE\Software\AppKey1 berisi dua nilai V1 dan V2 dan bahwa pengguna terbatas menulis nilai V3 ke kunci. Ketika pengguna mencoba membaca nilai dari kunci ini, tampilan gabungan menyertakan nilai V1 dan V2 dari penyimpanan global dan nilai V3 dari penyimpanan virtual.

Perhatikan bahwa nilai virtual lebih diutamakan daripada nilai global saat ada. Dalam contoh di atas, bahkan jika penyimpanan global memiliki nilai V3 di bawah kunci ini, nilai V3 masih akan dikembalikan ke pemanggil dari penyimpanan virtual. Jika V3 akan dihapus dari penyimpanan virtual, maka V3 akan dikembalikan dari toko global. Dengan kata lain, jika V3 akan dihapus dari HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software\AppKey1 tetapi HKEY_LOCAL_MACHINE\Software\AppKey1 memiliki nilai V3, maka nilai tersebut akan dikembalikan dari penyimpanan global.

Cakupan Virtualisasi Registri

Virtualisasi registri diaktifkan hanya untuk hal berikut:

  • Proses interaktif 32-bit.
  • Kunci dalam HKEY_LOCAL_MACHINE\Software.
  • Kunci yang dapat ditulis administrator. (Jika administrator tidak dapat menulis ke kunci, maka aplikasi akan gagal pada versi Windows sebelumnya meskipun dijalankan oleh administrator.)

Virtualisasi registri dinonaktifkan untuk hal berikut:

  • Proses 64-bit.

  • Proses yang tidak interaktif, seperti layanan.

    Perhatikan bahwa menggunakan registri sebagai mekanisme komunikasi antar-proses (IPC) antara layanan (atau proses lain yang tidak mengaktifkan virtualisasi) dan aplikasi tidak akan berfungsi dengan benar jika kunci divirtualisasi. Misalnya, jika layanan antivirus memperbarui file tanda tangannya berdasarkan nilai yang ditetapkan oleh aplikasi, layanan tidak akan pernah memperbarui file tanda tangannya karena layanan membaca dari toko global tetapi aplikasi menulis ke penyimpanan virtual.

  • Proses yang meniru pengguna. Jika proses mencoba operasi saat meniru pengguna, operasi tersebut tidak akan divirtualisasi.

  • Proses mode kernel seperti driver.

  • Proses yang telah memintaExecutionLevel ditentukan dalam manifesnya.

  • Kunci dan subkunjud HKEY_LOCAL_MACHINE\Software\Classes, HKEY_LOCAL_MACHINE\Software\Microsoft\Windows, dan HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT.

Mengontrol Virtualisasi Registri

Selain mengontrol virtualisasi pada tingkat aplikasi dengan menggunakan requestedExecutionLevel dalam manifes, administrator dapat mengaktifkan atau menonaktifkan virtualisasi berdasarkan per kunci untuk kunci di HKEY_LOCAL_MACHINE\Software. Untuk melakukan ini, gunakan opsi Reg.exe flag utilitas baris perintah dengan bendera yang tercantum dalam tabel berikut.

Bendera Makna
REG_KEY_DONT_SILENT_FAIL Bendera ini menonaktifkan virtualisasi registri terbuka. Jika bendera ini diatur dan operasi terbuka gagal pada kunci yang mengaktifkan virtualisasi, registri tidak mencoba membuka kembali kunci. Jika bendera ini jelas, registri mencoba membuka kembali kunci dengan akses MAXIMUM_ALLOWED alih-alih akses yang diminta.
REG_KEY_DONT_VIRTUALIZE Bendera ini menonaktifkan virtualisasi registri tulis. Jika bendera ini diatur dan operasi buat kunci atau set nilai gagal karena pemanggil tidak memiliki hak akses yang memadai ke kunci induk, registri gagal operasi. Jika bendera ini jelas, registri mencoba menulis kunci atau nilai di penyimpanan virtual. Pemanggil harus memiliki KEY_READ tepat pada kunci induk.
REG_KEY_RECURSE_FLAG Jika bendera ini diatur, bendera virtualisasi registri disebarkan dari kunci induk. Jika bendera ini jelas, bendera virtualisasi registri tidak disebarluaskan. Mengubah bendera ini hanya memengaruhi kunci turunan baru yang dibuat setelah bendera diubah. Ini tidak mengatur atau menghapus bendera ini untuk kunci turunan yang ada.

 

Contoh berikut menunjukkan penggunaan utilitas baris perintah Reg.exe dengan opsi FLAGS untuk mengkueri status bendera virtualisasi untuk kunci.

C:\>reg flags HKLM\Software\AppKey1 QUERY

HKEY_LOCAL_MACHINE\Software\AppKey1

        REG_KEY_DONT_VIRTUALIZE: CLEAR
        REG_KEY_DONT_SILENT_FAIL: CLEAR
        REG_KEY_RECURSE_FLAG: CLEAR

The operation completed successfully.

Setiap kali audit diaktifkan pada kunci yang sedang divirtualisasi, peristiwa audit virtualisasi baru dihasilkan untuk menunjukkan bahwa kunci sedang divirtualisasi (selain peristiwa audit biasa). Administrator dapat menggunakan informasi ini untuk memantau status virtualisasi pada sistem mereka.

Mulai Menggunakan Kontrol Akun Pengguna

Memahami dan Mengonfigurasi Kontrol Akun Pengguna

Praktik Terbaik dan Panduan Pengembang untuk Aplikasi di Lingkungan Dengan Hak Istimewa Terkecil