Karakter @ misterius di Windows Registry

5

Ketika saya menavigasi ke "HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ WMP.PlayCD \ Shell \ Play" di Windows Registry, saya menemukan satu REG_EXPAND_SE bernama MUIVerb pada sistem Windows 7 saya. Namun dalam isinya itu membawa "@% windir% \ system32 \ wmploc.dll, -6503"

Sekarang pertanyaan saya adalah: Apa arti atau karakter @ karakter ini? Saya seorang MS-DOS yang sudah besar dan saya belum pernah melihat notasi seperti itu sebelumnya. Haruskah saya menafsirkannya sebagai @ suka di alamat email? Apa hasil akhirnya. Apakah akhirnya menjadi "C: \% windir% \ system32 \ wmploc.dll, -6503"?

Karel
sumber

Jawaban:

7

Registri itu sendiri hanya menyimpan data hierarkis; notasi dan makna tergantung pada program yang menggunakan data.

Dalam hal ini, MUIVerbnilainya adalah tempat Explorer menyimpan deskripsi tekstual dari tindakan file. Untuk sementara mereka digunakan untuk disimpan dalam registri secara langsung, tetapi ketika berbagai "paket bahasa" Windows diperkenalkan, teks yang diterjemahkan dipindahkan ke file sumber daya, dan deskripsi yang dimulai dengan " @" ditafsirkan oleh Explorer sebagai "teks disimpan di lokasi berikut (sumber daya 'STRING' bernomor file EXE / DLL) ". (Dimungkinkan untuk memiliki beberapa versi sumber daya yang sama untuk bahasa yang berbeda. Anda dapat menggunakan Resource Explorer atau alat serupa untuk menjelajahi file DLL dan EXE.)

Satu pengecualian untuk aturan "registri sebagai penyimpan data" di atas. Perhatikan bahwa tipe datanya adalah REG_EXPAND_SZ, bukan REG_SZ. Ini berarti bahwa ketika Explorer membaca nilai, itu akan memiliki variabel lingkungan tertentu diperluas di dalamnya - Explorer akan menerima " @C:\WINDOWS\system32\wmploc.dll,-6503" (dengan yang %windir%diperluas). Itulah satu-satunya hal "istimewa" yang dapat dimiliki nilai dan data Registry.

Sisanya sepenuhnya bergantung pada Explorer - " @" awal berarti Explorer perlu memuat pustaka C:\WINDOWS\system32\wmploc.dll, menemukan sumber daya string -6503di dalamnya, dan menggunakan kontennya sebagai teks akhir untuk ditampilkan kepada pengguna.

grawity
sumber
+1 Jawaban bagus. Saya belajar lebih banyak dari jawaban ini daripada yang saya butuhkan dan pada pengalaman pemrograman pribadi saya kelihatannya 100% benar.
Karel
1
+1 Salah satu kemungkinan perangkap adalah bahwa string ini di-cache. Saya mengubah sumber daya DLL selama pengembangan dan menemukan bahwa string lama masih ditampilkan oleh penjelajah, bahkan setelah reboot. Anda mungkin akan menemukan banyak string dalam cache di sini:HKEY_CURRENT_USER\Software\Classes\Local Settings\MUICache
takrl