|   <sect1 id="registry"> | 
 |     <title>The Registry</title> | 
 |  | 
 |       <para> | 
 |         written by Ove Kåven | 
 |       </para> | 
 |       <para> | 
 |       (Extracted from <filename>wine/documentation/registry</filename>) | 
 |       </para> | 
 |  | 
 |     <para> | 
 |       After Win3.x, the registry became a fundamental part of Windows. | 
 |       It is the place where both Windows itself, and all | 
 |       Win95/98/NT/2000/whatever-compliant applications, store | 
 |       configuration and state data. While most sane system | 
 |       administrators (and Wine developers) curse badly at the twisted | 
 |       nature of the Windows registry, it is still necessary for Wine | 
 |       to support it somehow. | 
 |     </para> | 
 |  | 
 |     <sect2> | 
 |       <title>Registry structure</title> | 
 |    | 
 |       <para> | 
 |         The Windows registry is an elaborate tree structure, and not | 
 |         even most Windows programmers are fully aware of how the | 
 |         registry is laid out, with its different "hives" and numerous | 
 |         links between them; a full coverage is out of the scope of | 
 |         this document. But here are the basic registry keys you might | 
 |         need to know about for now. | 
 |       </para> | 
 |  | 
 |  | 
 |       <variablelist> | 
 |         <varlistentry> | 
 |           <term>HKEY_LOCAL_MACHINE</term> | 
 |           <listitem> | 
 |             <para> | 
 |               This fundamental root key (in win9x, stored in the | 
 |               hidden file <filename>system.dat</filename>) contains | 
 |               everything pertaining to the current Windows | 
 |               installation. | 
 |             </para> | 
 |           </listitem> | 
 |         </varlistentry>           | 
 |         <varlistentry> | 
 |           <term>HKEY_USERS</term> | 
 |           <listitem> | 
 |             <para> | 
 |               This fundamental root key (in win9x, stored in the | 
 |               hidden file <filename>user.dat</filename>) contains | 
 |               configuration data for every user of the installation. | 
 |             </para> | 
 |           </listitem> | 
 |         </varlistentry>           | 
 |         <varlistentry> | 
 |           <term>HKEY_CLASSES_ROOT</term> | 
 |           <listitem> | 
 |             <para> | 
 |               This is a link to HKEY_LOCAL_MACHINE\Software\Classes. | 
 |               It contains data describing things like file | 
 |               associations, OLE document handlers, and COM classes. | 
 |             </para> | 
 |           </listitem> | 
 |         </varlistentry>           | 
 |         <varlistentry> | 
 |           <term>HKEY_CURRENT_USER</term> | 
 |           <listitem> | 
 |             <para> | 
 |               This is a link to HKEY_USERS\your_username, i.e., your | 
 |               personal configuration. | 
 |             </para> | 
 |           </listitem> | 
 |         </varlistentry> | 
 |       </variablelist> | 
 |     </sect2> | 
 |  | 
 |     <sect2> | 
 |       <title>Using a Windows registry</title> | 
 |    | 
 |       <para> | 
 |         If you point Wine at an existing MS Windows installation (by | 
 |         setting the appropriate directories in | 
 |         <filename>~/.wine/config</filename>, then Wine is able to load | 
 |         registry data from it. However, Wine will not save anything to | 
 |         the real Windows registry, but rather to its own registry | 
 |         files (see below). Of course, if a particular registry value | 
 |         exists in both the Windows registry and in the Wine registry, | 
 |         then Wine will use the latter. | 
 |       </para> | 
 |       <para> | 
 |         Occasionally, Wine may have trouble loading the Windows | 
 |         registry. Usually, this is because the registry is | 
 |         inconsistent or damaged in some way. If that becomes a | 
 |         problem, you may want to download the | 
 |         <filename>regclean.exe</filename> from the MS website and use | 
 |         it to clean up the registry. Alternatively, you can always use | 
 |         <filename>regedit.exe</filename> to export the registry data | 
 |         you want into a text file, and then import it in Wine. | 
 |       </para> | 
 |     </sect2> | 
 |  | 
 |     <sect2> | 
 |       <title>Wine registry data files</title> | 
 |    | 
 |       <para> | 
 |         In the user's home directory, there is a subdirectory named | 
 |         <filename>.wine</filename>, where Wine will try to save its | 
 |         registry by default. It saves into four files, which are: | 
 |       </para> | 
 |  | 
 |       <variablelist> | 
 |         <varlistentry> | 
 |           <term><filename>system.reg</filename></term> | 
 |           <listitem> | 
 |             <para> | 
 |               This file contains HKEY_LOCAL_MACHINE. | 
 |             </para> | 
 |           </listitem> | 
 |         </varlistentry>           | 
 |         <varlistentry> | 
 |           <term><filename>user.reg</filename></term> | 
 |           <listitem> | 
 |             <para> | 
 |               This file contains HKEY_CURRENT_USER. | 
 |             </para> | 
 |           </listitem> | 
 |         </varlistentry>           | 
 |         <varlistentry> | 
 |           <term><filename>userdef.reg</filename></term> | 
 |           <listitem> | 
 |             <para> | 
 |               This file contains HKEY_USERS\.Default (i.e. the default | 
 |               user settings). | 
 |             </para> | 
 |           </listitem> | 
 |         </varlistentry>           | 
 |         <varlistentry> | 
 |           <term><filename>wine.userreg</filename></term> | 
 |           <listitem> | 
 |             <para> | 
 |               Wine saves HKEY_USERS to this file (both current and | 
 |               default user), but does not load from it, unless | 
 |               <filename>userdef.reg</filename> is missing. | 
 |             </para> | 
 |           </listitem> | 
 |         </varlistentry> | 
 |       </variablelist> | 
 |       <para> | 
 |         All of these files are human-readable text files, so unlike | 
 |         Windows, you can actually use an ordinary text editor on them | 
 |         if you must. | 
 |       </para> | 
 |       <para> | 
 |         In addition to these files, Wine can also optionally load from | 
 |         global registry files residing in the same directory as the | 
 |         global <filename>wine.conf</filename> (i.e. | 
 |         <filename>/usr/local/etc</filename> if you compiled from | 
 |         source). These are: | 
 |       </para> | 
 |  | 
 |       <variablelist> | 
 |         <varlistentry> | 
 |           <term><filename>wine.systemreg</filename></term> | 
 |           <listitem> | 
 |             <para>Contains HKEY_LOCAL_MACHINE.</para> | 
 |           </listitem> | 
 |         </varlistentry> | 
 |         <varlistentry> | 
 |           <term><filename>wine.userreg</filename></term> | 
 |           <listitem> | 
 |             <para>Contains HKEY_USERS.</para> | 
 |           </listitem> | 
 |         </varlistentry> | 
 |       </variablelist> | 
 |     </sect2> | 
 |  | 
 |     <sect2> | 
 |       <title>System administration</title> | 
 |    | 
 |       <para> | 
 |         With the above file structure, it is possible for a system | 
 |         administrator to configure the system so that a system Wine | 
 |         installation (and applications) can be shared by all the | 
 |         users, and still let the users all have their own personalized | 
 |         configuration. An administrator can, after having installed | 
 |         Wine and any Windows application software he wants the users | 
 |         to have access to, copy the resulting | 
 |         <filename>system.reg</filename> and | 
 |         <filename>wine.userreg</filename> over to the global registry | 
 |         files (which we assume will reside in | 
 |         <filename>/usr/local/etc</filename> here), with: | 
 |       </para> | 
 |       <screen> | 
 | cd ~/.wine | 
 | cp system.reg /usr/local/etc/wine.systemreg | 
 | cp wine.userreg /usr/local/etc/wine.userreg | 
 |       </screen> | 
 |       <para> | 
 |         and perhaps even symlink these back to the administrator's | 
 |         account, to make it easier to install apps system-wide later: | 
 |       </para> | 
 |       <screen> | 
 | ln -sf /usr/local/etc/wine.systemreg system.reg | 
 | ln -sf /usr/local/etc/wine.userreg wine.userreg | 
 |       </screen> | 
 |       <para> | 
 |         Note that the <filename>tools/wineinstall</filename> script | 
 |         already does all of this for you, if you install Wine source as root. | 
 |         If you then install Windows applications while logged in as | 
 |         root, all your users will automatically be able to use them. | 
 |         While the application setup will be taken from the global | 
 |         registry, the users' personalized configurations will be saved | 
 |         in their own home directories. | 
 |       </para> | 
 |       <para> | 
 |         But be careful with what you do with the administrator account | 
 |         - if you do copy or link the administrator's registry to the | 
 |         global registry, any user might be able to read the | 
 |         administrator's preferences, which might not be good if | 
 |         sensitive information (passwords, personal information, etc) | 
 |         is stored there. Only use the administrator account to install | 
 |         software, not for daily work; use an ordinary user account for | 
 |         that. | 
 |       </para> | 
 |     </sect2> | 
 |  | 
 |     <sect2> | 
 |       <title>The default registry</title> | 
 |  | 
 |       <para> | 
 |         A Windows registry contains many keys by default, and some of | 
 |         them are necessary for even installers to operate correctly. | 
 |         The keys that the Wine developers have found necessary to | 
 |         install applications are distributed in a file called | 
 |         <filename>winedefault.reg</filename>. It is automatically | 
 |         installed for you if you use the | 
 |         <filename>tools/wineinstall</filename> script in the Wine source, | 
 | 	but if you want to install it manually, you can do so by using the | 
 |         <command>regapi</command> tool to be found in the | 
 | 	<filename>programs/regapi/</filename> | 
 | 	directory in Wine source. | 
 |       </para> | 
 |     </sect2> | 
 |  | 
 |     <sect2> | 
 |       <title>The [registry] section</title> | 
 |  | 
 |       <para> | 
 |         With the above information fresh in mind, let's look at the  | 
 | 	<filename>wine.conf</filename>/<filename>~/.wine/config</filename> | 
 |         options for handling the registry. | 
 |       </para> | 
 |  | 
 |       <variablelist> | 
 |         <varlistentry> | 
 |           <term>LoadGlobalRegistryFiles</term> | 
 |           <listitem> | 
 |             <para> | 
 |               Controls whether to try to load the global registry | 
 |               files, if they exist. | 
 |             </para> | 
 |           </listitem> | 
 |         </varlistentry> | 
 |         <varlistentry> | 
 |           <term>LoadHomeRegistryFiles</term> | 
 |           <listitem> | 
 |             <para> | 
 |               Controls whether to try to load the user's registry | 
 |               files (in the <filename>.wine</filename> subdirectory of | 
 |               the user's home directory). | 
 |             </para> | 
 |           </listitem> | 
 |         </varlistentry> | 
 |         <varlistentry> | 
 |           <term>LoadWindowsRegistryFiles</term> | 
 |           <listitem> | 
 |             <para> | 
 |               Controls whether Wine will attempt to load registry data | 
 |               from a real Windows registry in an existing MS Windows | 
 |               installation. | 
 |             </para> | 
 |           </listitem> | 
 |         </varlistentry> | 
 |         <varlistentry> | 
 |           <term>WritetoHomeRegistryFiles</term> | 
 |           <listitem> | 
 |             <para> | 
 |               Controls whether registry data will be written to the | 
 |               user's registry files. (Currently, there is no | 
 |               alternative, so if you turn this off, Wine cannot save | 
 |               the registry on disk at all; after you exit Wine, your | 
 |               changes will be lost.) | 
 |             </para> | 
 |           </listitem> | 
 |         </varlistentry> | 
 |         <varlistentry> | 
 |           <term>UseNewFormat</term> | 
 |           <listitem> | 
 |             <para> | 
 |               This option is obsolete. Wine now always uses the new | 
 |               format; support for the old format was removed a while | 
 |               ago. | 
 |             </para> | 
 |           </listitem> | 
 |         </varlistentry> | 
 |         <varlistentry> | 
 |           <term>PeriodicSave</term> | 
 |           <listitem> | 
 |             <para> | 
 |               If this option is set to a nonzero value, it specifies | 
 |               that you want the registry to be saved to disk at the | 
 |               given interval. If it is not set, the registry will only | 
 |               be saved to disk when the wineserver terminates. | 
 |             </para> | 
 |           </listitem> | 
 |         </varlistentry> | 
 |         <varlistentry> | 
 |           <term>SaveOnlyUpdatedKeys</term> | 
 |           <listitem> | 
 |             <para> | 
 |               Controls whether the entire registry is saved to the | 
 |               user's registry files, or only subkeys the user have | 
 |               actually changed. Considering that the user's registry | 
 |               will override any global registry files and Windows | 
 |               registry files, it usually makes sense to only save | 
 |               user-modified subkeys; that way, changes to the rest of | 
 |               the global or Windows registries will still affect the | 
 |               user. | 
 |             </para> | 
 |           </listitem> | 
 |         </varlistentry> | 
 |       </variablelist> | 
 |     </sect2> | 
 |   </sect1> | 
 |  | 
 | <!-- Keep this comment at the end of the file | 
 | Local variables: | 
 | mode: sgml | 
 | sgml-parent-document:("configuring.sgml" "chapter" "sect1" "") | 
 | End: | 
 | --> |