Refleksi Registri

[Informasi dalam topik ini berlaku untuk Windows Server 2008, Windows Vista, Windows Server 2003, dan Windows XP. Dimulai dengan Windows 7 dan Windows Server 2008 R2, WOW64 tidak lagi menggunakan refleksi registri dan kunci yang sebelumnya tercermin dibagikan sebagai gantinya. Untuk informasi selengkapnya, lihat Kunci Registri yang Terpengaruh oleh WOW64.]

Redirektor registri mengisolasi aplikasi 32-bit dan 64-bit dengan memberikan tampilan logis terpisah dari bagian registri tertentu di WOW64. Namun, nilai beberapa kunci registri harus sama dalam tampilan 32-bit dan 64-bit.

Proses refleksi registri menyalin kunci registri dan nilai antara dua tampilan registri agar tetap sinkron. Setiap tampilan memiliki salinan fisik terpisah dari setiap kunci registri yang tercermin, satu untuk tampilan registri 32-bit dan yang lainnya untuk tampilan registri 64-bit.

Kunci yang tercermin disalin saat kunci ditutup dengan memanggil RegCloseKey. Perhatikan bahwa ini menimbulkan kemungkinan kondisi balapan: jika lebih dari satu proses mengubah kunci yang direfleksikan, panggilan RegCloseKey terakhir menentukan nilai akhir kunci.

Reflektor menyalin data aktivasi COM untuk Server lokal di antara tampilan, tetapi tidak menyalin data dalam proses karena pencampuran data dalam proses 32/64 tidak diizinkan pada Windows 64-bit.

Refleksi tidak diaktifkan untuk kunci registri bersama atau untuk kunci registri yang tidak dialihkan. Misalnya, pantulan tidak diaktifkan untuk kunci HKEY_LOCAL_MACHINE\System . Untuk daftar kunci registri yang dialihkan, dibagikan, atau direfleksikan, lihat Kunci Registri yang Terpengaruh oleh WOW64.

Refleksi registri menggunakan kebijakan "penulis terakhir menang" seperti yang diilustrasikan dalam contoh berikut:

  • Setelah penginstalan bersih Windows 64-bit, Wordpad.exe 64-bit terdaftar untuk menangani file .doc. Reflektor menyalin pendaftaran .doc dari tampilan registri 64-bit ke dalam tampilan registri 32-bit.
  • Administrator menginstal Office 32-bit, yang mendaftarkan Winword.exe 32-bit untuk menangani file .doc dalam tampilan registri 32-bit. Reflektor registri menyalin informasi ini ke dalam tampilan registri 64-bit, sehingga aplikasi 32-bit dan 64-bit meluncurkan versi 32-bit Winword.exe untuk file .doc.
  • Administrator menginstal Office 64-bit, yang mendaftarkan Winword.exe 64-bit untuk menangani file .doc dalam tampilan registri 64-bit. Reflektor registri menyalin informasi ini ke dalam registri 32-bit, sehingga aplikasi 32-bit dan 64-bit meluncurkan versi 64-bit Winword.exe untuk file .doc.

Oleh karena itu, informasi asosiasi file dipertahankan untuk aplikasi yang terakhir diinstal.

Ini dapat berguna untuk aplikasi 32-bit dan 64-bit untuk berbagi nilai kunci registri tertentu yang biasanya ditulis untuk memisahkan tampilan registri. Misalnya, server OLE 32-bit yang dapat melayani permintaan dari klien 32-bit dan 64-bit dapat membuat data registri 32-bit tersedia untuk tampilan 64-bit dari registri sistem.

Ketika komponen menulis data di registri sistem, WOW64 menganalisis informasi dan membuat salinan data dalam tampilan alternatif registri jika sesuai. Biasanya, proses ini menyimpan dua salinan fisik terpisah dari kunci registri yang sama dalam kedua tampilan di registri, dan disebut refleksi registri atau pencerminan registri.

Sebagian besar kunci di bawah akar kelas berada dalam kategori ini. Updates ke kunci tercermin ketika pembaruan selesai dan handel ke kunci ditutup. Dalam kasus tertentu, menulis ke kunci tidak tercermin jika kunci memiliki beberapa dependensi bitness. Misalnya, kunci InprocServer32 32-bit tidak relevan untuk aplikasi 64-bit, sehingga kunci InprocServer32 tidak tercermin pada tampilan registri 64-bit. Namun, aplikasi 64-bit dapat menggunakan kunci LocalServer32 32-bit dan kunci LocalServer32 tercermin.

Untuk HKEY_LOCAL_MACHINE\Software\Classes\CLSID dan HKEY_CURRENT_USER\Software\Classes\CLSID, hanya CLSID yang tidak menentukan InprocServer32 atau InprocHandler32 yang tercermin. Hanya CLSID LocalServer32 yang tercermin karena kehabisan proses dan dapat diaktifkan oleh aplikasi 32 atau 64-bit. CLSID InProcServer32 tidak tercermin karena tidak dimungkinkan untuk memuat DLL 32-bit untuk eksekusi dalam proses 64-bit, atau DLL 64-bit untuk eksekusi dalam proses 32-bit.

Untuk HKEY_LOCAL_MACHINE\Software\Classes\Appid dan HKEY_CURRENT_USER\Software\Classes\Appid, nilai registri DllSurrogate dan DllSurrogateExecutable tidak tercermin jika nilainya adalah string kosong.

Untuk menonaktifkan dan mengaktifkan refleksi registri untuk kunci tertentu yang tercermin, gunakan fungsi RegDisableReflectionKey dan RegEnableReflectionKey . Fungsi-fungsi ini tidak memengaruhi kunci yang tidak ada dalam daftar kunci yang tercermin sebelumnya dalam topik ini. Aplikasi harus menonaktifkan refleksi hanya untuk kunci registri yang mereka buat dan tidak mencoba menonaktifkan refleksi untuk kunci yang telah ditentukan sebelumnya seperti HKEY_LOCAL_MACHINE atau HKEY_CURRENT_USER. Untuk menentukan apakah kunci pada daftar pantulan telah dinonaktifkan, gunakan fungsi RegQueryReflectionKey .

Kunci yang tercermin tidak boleh digunakan dalam operasi registri yang ditransaksikan. Menulis ke kunci yang tercermin selama transaksi dapat menyebabkan transaksi gagal. Untuk informasi selengkapnya tentang transaksi, lihat Kernel Transaction Manager.

Registry Redirector

Refleksi Registri di Windows

Kunci Registri Yang Dipengaruhi oleh WOW64